题目描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222 33333333333333333333
样例输出
55555555555555555555
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,t,len1,len2,r;
char a[1000],b[1000];
short c[1000];
while(scanf("%s",a)!=EOF)
{
scanf("%s",b);
len1=strlen(a);
len2=strlen(b);
for(i=0;i<len1/2;i++)
{
t=a[i];
a[i]=a[len1-1-i];
a[len1-1-i]=t;
}
for(i=0;i<len2/2;i++)
{
t=b[i];
b[i]=b[len2-1-i];
b[len2-1-i]=t;
}
r=0;
i=0;
while(i<len1&&i<len2)
{
c[i]=(a[i]-'0'+b[i]-'0'+r)%10;
r=(a[i]-'0'+b[i]-'0'+r)/10;
i++;
}
if(i<len1)
while(i<len1)
{
c[i]=(a[i]-'0'+r)%10;
r=(a[i]-'0'+r)/10;
i++;
}
else
while(i<len2)
{
c[i]=(b[i]-'0'+r)%10;
r=(b[i]-'0'+r)/10;
i++;
}
if(r>0)
c[i++]=r;
for(j=i-1;j>=0;j--)
printf("%d",c[j]);
printf("\n");
}
return 0;
}