1 #include<stdio.h> 2 #include<string.h> 3 void add(char a[], char b[]) 4 { 5 char c[1002]={' '}; 6 int len_a=strlen(a), len_b=strlen(b); 7 int i=len_a; 8 int j=len_b; 9 int temp=0, flag=0; 10 11 for( ; i>0 ; i--) 12 { 13 if(j>0) 14 { 15 temp=a[i-1]-'0'+b[i-1]+flag-'0'; 16 j--; 17 } 18 else 19 temp=a[i-1]+flag-'0'; 20 if(temp>=10) 21 flag=1; 22 else 23 flag=0; 24 temp=temp%10; 25 c[i]=temp+'0'; 26 } 27 28 if(flag==1) c[0]='1'; 29 for(i=0; i<=len_a; i++) 30 { 31 if(c[i]!=' ') printf("%c",c[i]); 32 } 33 printf("\n"); 34 } 35 36 int main() 37 { 38 char a[1001], b[1001]; 39 int i, j, n; 40 int len_a, len_b; 41 scanf("%d", &n); 42 for(i=0;i<n;i++) 43 { 44 scanf("%s", &a); 45 len_a=strlen(a); 46 scanf("%s", &b); 47 len_b=strlen(b); 48 printf("Case %d:\n%s + %s = ", i+1, a, b); 49 if(len_a>=len_b) 50 add(a,b); 51 else 52 add(b,a); 53 if(i+1!=n) 54 printf("\n"); 55 56 } 57 return 0; 58 }
题目
http://acm.hdu.edu.cn/showproblem.php?pid=1002
其他地方应该没问题,就是输出的地方,用%d,%c...都不行,,不知道怎么控制。。。。
如果是两个大数位数不相同的话,,那么就会出错。。。。
想了很久,想不出来
看着 C语言就烦,自己单步调一下, 估计错误是在 char c[1002]={' '}(1002位置是SPACE, ASCII是32 ,而显示错误是正好ASCII 小于 42 ).
-------------------------------
PS: 搞ACM 最好就别用 C了, JAVA 多好,短平快, 这道题目,java 就直接 一个 BigInteger 搞定就行了 3行代码啊!!
谢谢了。问题已经解决是temp=a[i-1]-'0'+b[i-1]+flag-'0';
i改为j 就可以
没帮你解决你的问题,提个建议吧。高精度算法不是你这么写的。。用int数组存结果的话会更好算,你这样存ASCII码太蛋疼了。。而且一般采用的倒序存储。建议你看看别人的高精度代码。。。
谢谢了。问题已经解决是temp=a[i-1]-'0'+b[i-1]+flag-'0';
i改为j 就可以