水题。需要注意的就是这里不能直接从a0,b0开始加,因为他们如果位数不一样就会发生错乱,如123+6789,如果直接从1、6开始加,和阶乘一样,那么就错了,因为位不对应了。所以必须先把a和b逆序存入另两个字符串,变成321+9876,然后从第0位开始挨着加就行了,最后也是逆序
输出。
#include
#include
int main()
{
int t,i,cou = 0,k,j,c[1005],jin,s,la,lb;
char a[1005],b[1005],a1[1005],b1[1005];
scanf("%d",&t);
while(t--)
{
cou++;
printf("Case %d:\n",cou);
la = strlen(a1);
lb = strlen(b1);
for(i = 0,j = la - 1 ; i < la ; i++,j--) //逆序存入
a[j] = a1[i];
a[la] = '\0';
for(i = 0,j = lb - 1 ; i < lb ; i++,j--)
b[j] = b1[i];
b[lb] = '\0';
jin = 0;
for(i = 0 ; a[i] != '\0' && b[i] != '\0' ; i++)
{
s = a[i] + b[i] - 96 + jin;
c[i] = s % 10;
jin = s/10;
}
j = i;
//这里如果漏了。。那么位数一样的就输出不出来了,因为j没赋值。
if(a[i] != '\0')
//处理a与b不对应的位上的数字和,即多余位
{
for(j = i ; a[j] != '\0' ; j++)
{
s = a[j] + jin - 48;
c[j] = s % 10;
jin = s / 10;
}
}
else if(b[i] != '\0')
{
for(j = i ; b[j] != '\0' ; j++)
{
s = b[j] + jin - 48;
c[j] = s % 10;
jin = s / 10;
}
}
k = j - 1;
if(jin)
//别忘了处理最后的进位
{
c[j] = jin;
k = j;
}
for(; k >= 0 ; k--)
printf("%d",c[k]);
printf("\n");
}
return 0;
}