所以为了降低时间复杂度,后面的while循环不能要了。。而是改在第二个循环中。。其实你应该早告诉我a[i]是在哪里开始溢出的,因为我找的就是这个溢出点。。不过,多谢啦。。这是我考虑太不全面了
#include<stdio.h> #include<string.h> int main() { char a[50]={'\0'},b[50]={'\0'},c[50]={'\0'}; // 为了避免使用元素时没有初值,所以全部赋为0 char A[50],B[50]; int i,j,Ret,T,N,LenA,LenB; scanf("%d",&T); for(N = 1; N <= T; N++) // 多次测试,总共T次? { scanf("%s%s",a,b); // 输入两个数据。、,以字符串的形式 strcpy(A,a); strcpy(B,b); strrev(a); strrev(b); // 将两个字符创倒置,方便计算 printf("%-20s\n",a); printf("%-20s\n",b); LenA = strlen(a); LenB = strlen(b); // 求出a,b的长度 if(LenA > LenB) // 如果a比b长 { for(i=0; i<LenB; i++) // 把b长度以前的数字相加 c[i] = a[i] + b[i]-'0'; // 相加后的数字赋给数组c for(; i<LenA; i++) // 将多出的部分照抄,下面大体一样 c[i] = a[i]; for(i = 0; c[i] != 0;i++) { Ret = c[i]-'0'; if(Ret > 9) { c[i] = Ret%10 + '0'; c[i+1] += Ret/10; } } } else if(LenA < LenB) { for(i=0; i<LenA; i++) // 把b长度以前的数字相加 c[i] = a[i] + b[i]-'0'; // 相加后的数字赋给数组c for(; i<LenB; i++) // 将多出的部分照抄,下面大体一样 c[i] = b[i]; for(i = 0; c[i] != 0;i++) { Ret = c[i]-'0'; if(Ret > 9) { c[i] = Ret%10 + '0'; c[i+1] += Ret/10; } } } else { for(i=0; i<LenB; i++) c[i] = a[i] + b[i]-'0'; for(i = 0; c[i] != 0;i++) { Ret = c[i]-'0'; if(Ret > 9) { c[i] = Ret%10 + '0'; c[i+1] += Ret/10; } } } strrev(c); printf("case %d:\n",N); printf("%s + %s = %s",A,B,c); } getch(); return 0; }现在有个怪问题。。就是只有第一次是错误的。。。同样的数据在第二次测试时N=2时就是对的。。这是什么BUG?