Description
给出两个整数a和b,输出a+b
Input
第一行为用例组数T,每组用例占一行包括两个整数a和b(a和b非常大)
Output
输出a+b
Sample Input
2
1 2
112233445566778899 998877665544332211
Sample Output
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
Solution
a和b非常大,所以要模拟加法过程,注意进位
Code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int n,m=1;
scanf("%d",&n);
while(n--)
{
int i,j,k;
char a[1000],b[1000],c[1000]={0};
scanf("%s %s",a,b);
if(strlen(a)>=strlen(b))//累加操作
for(i=strlen(a)-1,j=strlen(b)-1,k=0;i>=0;i--,j--,k++)
{
if(j>=0)
c[k]=a[i]+b[j]-48;
else
c[k]=a[i];
}
if(strlen(a)<strlen(b))
for(i=strlen(a)-1,j=strlen(b)-1,k=0;j>=0;i--,j--,k++)
{
if(i>=0)
c[k]=a[i]+b[j]-48;
else
c[k]=b[j];
}
for(i=0;i<strlen(c)-1;i++)//进位操作
{
if(i!=strlen(c)-1)
{
if(c[i]>57)
{
c[i]-=10;
c[i+1]++;
}
}
else if(i==strlen(c)-1)
{
if(c[i]>57)
{
c[i]-=10;
c[i+1]='1';
}
}
}
strrev(c);//将c反转输出
printf("Case %d:\n",m);
printf("%s + %s = %s\n",a,b,c);
if(n>=1) printf("\n");
m++;
}
return 0;
}