所以为了降低时间复杂度,后面的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?