数学题杭电1002A+B。。。交了七遍,五遍竟然是没删除测试时候的输出= =。。。。

#include<stdio.h>
#include<string.h>
int main()
{
int n,i,l1,l2,max,a,j,t;
char s1[1001],s2[1001],s3[1001];
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%s%s",s1,s2);

l1 = strlen(s1);
l2 = strlen(s2);
if(l1>l2)
max = l1;
else
max = l2;

t=max;
memset(s3,'\0',1001);
memset(s3,'0',max+1);
l1 = l1-1;
l2 = l2-1;
max = max;
s3[0]='0';
while(l1>=0 && l2>=0)
{
a = s1[l1--]-'0'+s2[l2--]-'0'+s3[max]-'0';//问题可以直接简化为小学的算术题,从后往前算
s3[max--] ='0'+a%10;
if(a>=10)
s3[max]+=1;//大于十的时候记得向前加一,因为以上三个数永远不会大于等于20.。。。

}
while(l1>=0)
{
a = s3[max]-'0'+s1[l1--]-'0';
s3[max--]='0'+a%10;
if(a>=10)
s3[max]+=1;
}
while(l2>=0)
{
a = s3[max]-'0'+s2[l2--]-'0';
s3[max--]='0'+a%10;
if(a>=10)
s3[max]+=1;
}

printf("Case %d:\n",i+1);
printf("%s + %s = ",s1,s2);

if(s3[0] > '0')
printf("%c",s3[0]);//这一步很重要,假设是1和9想加,会上升一位
for(j = 1;j < t; j++)
printf( "%c", s3[j]);
printf( "%c\n", s3[j]);
if(i<n-1)
printf("\n");
}
return 0;
}
原文地址:https://www.cnblogs.com/0803yijia/p/2357879.html