给两个数n1, n2,计算s = n1 + n2。很简单的算术题,不是吗?
输入格式
输入的第一行为整数N,表示测试数据的个数。接下来的N行,每行为两个非负整数,即上面的n1和n2。n1、n2的位数不会超过1000位,除0外没有数字以0开头(e.g. 0100, 0053)。
输出格式
对于每对n1、n2,输出一行结果:s=n1 + n2。
样例输入
3 3 2 90 10 999999999999999999999999999999999999999999 9999999999999999999999999999999999
样例输出
5 100 1000000009999999999999999999999999999999998
思路很简单,但是要实现高精度加法
#include<stdio.h>
#include<string.h>
int main() {
int i,p,q,k,t;
scanf("%d\n",&t);
while(t--) {
char a[1001]= {0},b[1001]= {0},e[2002]= {0};
int c[1001]= {0},d[1001]= {0},sum[1002]= {0};
int len_a,len_b;
gets(e);
p=strlen(e);
for(i=0; i<p ; i++) {
if(e[i]==' ') {
break;
}
a[i]=e[i];
}
len_a=i-1;
i++;
for(k=0; i<p; i++,k++)
b[k]=e[i];
len_b=k-1;
for(i=0; i<=len_a; i++)
c[i]=a[len_a-i]-'0';
for(i=0; i<=len_b; i++)
d[i]=b[len_b-i]-'0';
for(i=0; i<=len_a||i<=len_b; i++) {
sum[i]+=c[i]+d[i];
if(sum[i]>=10) {
++sum[i+1];
sum[i]-=10;
}
}
if(sum[i--]>0)printf("1");
for(; i>=0; i--)
printf("%d",sum[i]);
printf("\n");
}
return 0;
}