高精度算法-大数加法
问题 C: A+B Problem (6)
时间限制: 1 Sec 内存限制: 128 MB
提交: 486 解决: 253
[提交][状态][讨论版]
题目描述
很长整数是指无法用long long型数存储的数,因此需要用字符串数组来存储两个被加数,相加的结果也保存于字符数组中,假如被加数长度不超过十进制100位,请编程实现该加法程序并将相加结果输出。
输入
两个很长的整数
输出
很长整数加法结果
样例输入
35555555555555555555
55555555555555555555
样例输出
91111111111111111110
我的原代码是这样的:
1 #include<stdio.h> 2 #include<string.h> 3 void fun(char a[],char b[],char c[]) 4 { 5 int i,j,jinw=0,ci=0,x,y,z,k; 6 char tmp; 7 i=strlen(a)-1; 8 j=strlen(b)-1; 9 while(i>=0||j>=0) //检索直到两数组都被加完 10 { 11 if(i<0) //当a数组被加完时 12 x=0; 13 else 14 x=a[i]-'0'; 15 if(j<0) //当b数组被加完时 16 y=0; 17 else 18 y=b[j]-'0'; 19 20 z=x+y; 21 22 if(jinw) //如果有进位 23 z++; 24 if(z>9) //考虑当前数累加是否会导致下次计算进位 25 { 26 jinw=1; 27 z%=10; 28 } 29 else 30 jinw=0; 31 c[ci++]=z+'0'; 32 i--; 33 j--; 34 } 35 if(jinw) //考虑最后一位是否还有进位 36 c[ci++]='1'; 37 c[ci]='\0'; //为C数组添加终止符 38 k=strlen(c); 39 for(i=0;i<k/2;i++) 40 { 41 tmp=c[i];c[i]=c[k-i-1];c[k-i-1]=tmp; 42 } 43 printf("%s\n",c); 44 } 45 int main() 46 { 47 char a[600],b[600],c[600]; 48 while(scanf("%s%s",a,b)!=EOF) 49 { 50 fun(a,b,c); 51 } 52 return 0; 53 }
这样写的话我试着测试了几个数据,只要a数组长度和b数组长度相同,不会有什么问题
但是当a数组长度和b数组长度不同时,便出现了问题
比如会出现奇怪的符号
@蚂蚁学姐 求解啊~!!!
2013/12/15
已解决-