屋面花架是什么:这个C++的高精度加法程序有什么问题?

来源:百度文库 编辑:神马品牌网 时间:2024/05/02 20:23:24
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{ string s1,s2;
int a[260],b[260],c[260];
int i,k,k1,k2,l1,l2,y,x;
cin >> s1;
cin >> s2;
l1=s1.size();
l2=s2.size();
k1=260;
for (i=l1;i>=1;i--)
{a[k1]=(int)s1[i]-48;
k1=k1-1;}
k1=k1+1;
for (i=l2;i>=1;i--)
{b[k2]=(int)s2[i]-48;
k2=k2-1;}
k2=k2+1;
if (k1>k2)
k=k2;
else
k=k1;
y=0;
for (i=260;i>=k;i--)
{x=a[i]+b[i];
c[i]=x%10;
y=x/10;}
if (y!=0)
{k=k-1;
c[k]=y;}
for (i=k;i<=k;i++)
cout<<c[i];
system("PAUSE");
return EXIT_SUCCESS;
}
为什么运行时出错?
请问哪写错了?

你这个程序即使运行不出错,结果也不对
就从输出格式说吧,要是数组不够两位,你就没添0占位
而且读入数据不用那么繁琐,程序结尾就return 0就可以,不用宏
还有在进行字符号转换成数字也不需要用(int)-48,那样会麻烦
你可以用函数atoi(char*) 完成,比如: int i=atoi("89138"); cout << i ;
还有就是你为什么用两位呢,用六位,四位不是效率更高吗
我给你个程序吧,让我们共同进步,共同指教,哈哈~~
#include<iostream>
#define FOR(i,a,b) for(i=a;i<b;i++)
#define FOR2(i,a,b) for(i=a;i>=b;i--)
using namespace std;

int i,*n,lenth;
bool first_big=true;

void Compile(int* &n1,int* &n2,int lenth)
{
FOR(i,0,lenth)
{
n1[i]+=n2[i];
if(i<lenth-1 && n1[i]>=1000) {n1[i]-=1000; n1[i+1]++;}
}
}

void READIN(char a[],int* &num,int &lenth)
{
char* p=a;
FOR(i,0,255) *p++='\0';
cin>>a;
num=new int[lenth=strlen(a)/3+1];
p=a+strlen(a)-3;
for(i=0; p>=a ;p-=3,i++) {num[i]=atoi(p);*p='#';}
if(strlen(a)%3>0)num[i]=atoi(a);
}
int main()
{
char *a=new char[255];
int *n1,*n2,long1,long2;
READIN(a,n1,long1);
READIN(a,n2,long2);
delete [] a;
if(long1>long2) Compile(n1,n2,long2);
else {Compile(n2,n1,long1); first_big=false;}
if(first_big) {n=n1; lenth=long1;}
else {n=n2; lenth=long2;}
if (n[lenth-1]==0) lenth--;
cout<<n[lenth-1]; lenth-=2;
FOR2(i,lenth,0)
{
if(i<lenth-1)
{
if(n[i]>=10 && n[i]<100) cout<<'0';
if(n[i]>=0 && n[i]<10) cout<<"00";
}
cout<<','<<n[i];
}
system("pause");
}