思路:因为数字长度是小于1000,数比较大,所以以字符串读入,存入数组;其次将数组进行倒置,将两个数组的元素依次相加,如果相加大于9,进行进位;
#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
int main()
{
int n;
int flag=1;
cin>>n;
while(n--)
{
char a[8000],b[8000];
int na[8000],nb[8000];
int pre,sum[1001]={0};
//数组置零
memset(sum,0,sizeof(sum));
memset(na,0,sizeof(na));
memset(nb,0,sizeof(nb));
scanf("%s%s",a,b);
pre=0;
//判断字符串长度
int lena=strlen(a);
int lenb=strlen(b);
//数组倒置
for(int i=0;i<lena;i++)
{
na[lena-1-i]=a[i]-'0';
}
for(int j=0;j<lenb;j++)
{
nb[lenb-1-j]=b[j]-'0';
}
//选择长度较长的数组长度
int mlen=max(lena,lenb);
//数组相加,注意进位 。pre/10为进位
for(int k=0;k<mlen;k++)
{
sum[k]=na[k]+nb[k]+pre/10;
pre=sum[k];
}
//若数组最后相加需要进位,即正常相加是前面第一位需要进位,则数组长度++进行进位
while(pre>9)
{
sum[mlen]=pre/10%10;
mlen++;
pre/=pre;
}
printf("Case %d:",flag++);
cout<<endl;
printf("%s + %s = ",a,b);
for(int i=mlen-1;i>=0;i--)
{
//注意输出要%10
cout<<sum[i]%10;
}
cout<<endl;
//注意最后要加一个换行
if(n)
cout<<endl;
}
}