样例能输出,不知道错在哪里,写的太冗长了,懒得改~~~日后再调
思路:按照两字符串长短排序,长在前,短在后。然后,先按照短的模拟加法运算,再按照长的多出来的长度继续模拟加法运算,最后计算最高位,需根据字符串长短分别计算次高位是否产生进位(可以用一个三元运算符减少好多行),挖坑,日后想起来,回来填,嘿嘿~~
#define maxn 1005
#include<stdio.h>
#include<string.h>
char a[maxn],b[maxn],up[maxn],temp[maxn],s[maxn];
char first[2]={'1','\0'};
int main()
{
int n;
scanf("%d",&n);
for(int k=1;k<=n;++k)
{
scanf("%s%s",a,b);
if(strlen(a)<strlen(b))
{
strcpy(temp,a);
strcpy(a,b);
strcpy(b,temp);
}
int len_a=strlen(a);
int len_b=strlen(b);
char answer[1005];
memset(answer,0,sizeof(s));
memset(up,0,sizeof(up));
if(k!=n)
{
printf("Case %d:\n%s + %s = ",k,a,b);
for(int i=(len_b-1);i>=(len_a==len_b?1:0);--i)
{
int now=a[i+len_a-len_b]-'0'+b[i]-'0'+up[i+len_a-len_b];
if(now>9)
{
up[i+len_a-len_b-1]=1;
sprintf(s,"%d",now-10);
strcat(answer,s);
}
else
{
sprintf(s,"%d",now);
strcat(answer,s);
}
}
for(int j=len_a-len_b-1;j>0;j--)
{
int later=a[j]-'0'+up[j];
if(later>9)
{
up[j-1]=1;
sprintf(s,"%d",later-10);
strcat(answer,s);
}
else
{
sprintf(s,"%d",later);
strcat(answer,s);
}
}
if(len_a!=len_b)
{
if(a[0]-'0'+up[0]>9)
{
sprintf(s,"%d",(a[0]-'0'+up[0]-10));
strcat(s,first);
strcat(answer,s);
}
else
{
sprintf(s,"%d",(a[0]-'0'+up[0]));
strcat(answer,s);
}
}
else
{
if(a[0]-'0'+b[0]-'0'+up[0]>9)
{
sprintf(s,"%d",(a[0]-'0'+b[0]-'0'+up[0]-10));
strcat(s,first);
strcat(answer,s);
}
else
{
sprintf(s,"%d",(a[0]-'0'+b[0]-'0'+up[0]));
strcat(answer,s);
}
}
if(len_a==len_b)
for(int i=((a[0]-'0'+b[0]-'0'+up[0])>9?len_a:(len_a-1));answer[i]!='\0'&&i>-1;i--)
printf("%c",answer[i]);
else
for(int i=((a[0]-'0'+up[0])>9?len_a:(len_a-1));i>-1;--i)
printf("%c",answer[i]);
printf("\n\n");
}
else
{
printf("Case %d:\n%s + %s = ",k,a,b);
for(int i=(len_b-1);i>=(len_a==len_b?1:0);--i)
{
int now=a[i+len_a-len_b]-'0'+b[i]-'0'+up[i+len_a-len_b];
if(now>9)
{
up[i+len_a-len_b-1]=1;
sprintf(s,"%d",now-10);
strcat(answer,s);
}
else
{
sprintf(s,"%d",now);
strcat(answer,s);
}
}
for(int j=len_a-len_b-1;j>0;j--)
{
int later=a[j]-'0'+up[j];
if(later>9)
{
up[j-1]=1;
sprintf(s,"%d",later-10);
strcat(answer,s);
}
else
{
sprintf(s,"%d",later);
strcat(answer,s);
}
}
if(len_a!=len_b)
{
if(a[0]-'0'+up[0]>9)
{
sprintf(s,"%d",(a[0]-'0'+up[0]-10));
strcat(s,first);
strcat(answer,s);
}
else
{
sprintf(s,"%d",(a[0]-'0'+up[0]));
strcat(answer,s);
}
}
else
{
if(a[0]-'0'+b[0]-'0'+up[0]>9)
{
sprintf(s,"%d",(a[0]-'0'+b[0]-'0'+up[0]-10));
strcat(s,first);
strcat(answer,s);
}
else
{
sprintf(s,"%d",(a[0]-'0'+b[0]-'0'+up[0]));
strcat(answer,s);
}
}
if(len_a==len_b)
for(int i=((a[0]-'0'+b[0]-'0'+up[0])>9?len_a:(len_a-1));answer[i]!='\0'&&i>-1;--i)
printf("%c",answer[i]);
else
for(int i=((a[0]-'0'+up[0])>9?len_a:(len_a-1));i>-1;--i)
printf("%c",answer[i]);
}
}
return 0;
}