1513: a+b
1.描述
a+b
输入
一个 m 代表多少组数据
每组两个数a b,空格隔开,每个数小于1000位
输出
a+b的和。。并换行。
样例输入
5
123456 123456
654321 654321
987654321123456789 987654321123456789
111111111111111111111111111111111111112222222222222222222222222222222333333333333333333333
9999999999999999999999999999999998888888888888888888888887777777777777777777777777777777
111111111 111111111111
样例输出
246912
1308642
1975308642246913578
121111111111111111111111111111111110001111111111111111111110000000000111111111111111111110
111222222222
2.代码
#include<stdio.h>
#include<math.h>
#include <string.h>
int main()
{
int n,x,y,i;
char a[1001],b[1001];
scanf("%d",&n);
while(n--)
{
int a1[1001]= {0},b1[1001]= {0},c[1001]= {0};
int max;
scanf("%s %s",a,b);
x=strlen(a);
y=strlen(b);
if(x>y)
{
for(i=0; i<x; i++)
{
a1[i]=a[i]-'0';
}
for(i=x-y; i<x; i++)
{
b1[i]=b[i-x+y]-'0';
}
max=x;
}
else if(x<y)
{
for(i=y-x; i<y; i++)
{
a1[i]=a[i-y+x]-'0';
}
for(i=0; i<y; i++)
{
b1[i]=b[i]-'0';
}
max=y;
}
else
{
for(i=0; i<x; i++)
{
a1[i]=a[i]-'0';
}
for(i=0; i<y; i++)
{
b1[i]=b[i]-'0';
}
max=x;
}
for(i=max; i>0; i--)
{
if(b1[i-1]+a1[i-1]+c[i]>=10)
{
c[i-1]++;
c[i]=(b1[i-1]+a1[i-1]+c[i])%10;
}
else
{
c[i]=a1[i-1]+b1[i-1]+c[i];
}
}
if(a1[0]+b1[0]>=10)
{
i=0;
}
else
{
i=1;
}
int t=0;
for(; i<=max; i++)
{
if(c[i]!=0&&t==0)
{
t=1;
}
if(t!=0)
{
printf("%d",c[i]);
}
}
if(t==0)
printf("0");
printf("\n");
}
return 0;
}