#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 55005
int main()
{
int s,t;
scanf("%d",&s);
t=s;
while(s--){
char m[maxsize],n[maxsize];//输入的字符串
char mmt[maxsize],nnt[maxsize];//翻转后的字符串
int printarry[maxsize];//最后输出的数组
scanf("%s",m);
scanf("%s",n);
memset(printarry,0,sizeof(printarry));
int len,lenm,lenn,ant;
lenm=strlen(m),lenn=strlen(n);
for(int i =lenm-1 ;i>=0;i--){
mmt[lenm-i-1]=m[i];
}
for(int i =lenn-1 ;i>=0;i--){
nnt[lenn-i-1]=n[i];
}
len=lenm>=lenn?lenm:lenn;//两个串的最大长度
for(int i=0;i<len;i++){
if(i<=lenm-1&&i<=lenn-1){//两个串的第i个位置都不空
ant=0;
ant=(int(mmt[i])+int(nnt[i])+printarry[i]-96)/10;//相加产生的进位
//一定要先除再取余!!!
printarry[i]=(int(mmt[i])+int(nnt[i])+printarry[i]-96)%10;//int完之后是ASCII码,0的ASCII码是48
if(ant){
printarry[i+1]++;//产生的进位添加到前一位
}
}
else if(i>lenm-1&&i<=lenn){
printarry[i]=int(nnt[i])+printarry[i]-48;//第一个字串长度小于第二个字串长度
}
else if(i<=lenm&&i>lenn-1){
printarry[i]=int(mmt[i])+printarry[i]-48;//第二个字串长度小于第一个字串长度
}
}
int ans=t-s;
printf("Case %d:\n",ans);//格式,记得大写
printf("%s",m);
printf(" + ");
printf("%s",n);
printf(" = ");
int w=printarry[len];//判断两个数相加,有没有产生溢出位
if(w){
for(int i=len;i>=0;i--){//溢出,从溢出位开始输出
printf("%d",printarry[i]);
}
}
else{
for(int i=len-1;i>=0;i--){//没有溢出,从最大长度len处输出
printf("%d",printarry[i]);
}
}
if(ans!=t) printf("\n\n");//每个结果要求的换行,最后一个数据之后还有 换行
else printf("\n");
}
return 0;
}
好长时间没写了,随便写了一下,发现忘的不少,记录一下吧。整体思想:输入,翻转,相加,进位加到前一位,输出。