注意末尾回车符的数量,杭电题经常有此类坑。
swap可以交换char数组。
strlen得到的返回值,最好存到size_t类型中。
但放入for循环时,用int代替,直接用size_t的后果是for循环由于size_t没有负类型的原因会死循环。
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 1005
char num1[maxn];
char num2[maxn];
int ans[maxn];
int main()
{
int N;
scanf("%d",&N);
for(int i=1;i<=N;i++)
{
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
memset(ans,0,sizeof(ans));
scanf("%s%s",num1,num2);
size_t lenth1 = strlen(num1);
size_t lenth2 = strlen(num2);
int cnt = 0;
printf("Case %d:\n",i);
printf("%s + %s = ",num1,num2);
int k =0;
if(lenth2>lenth1)
{
swap(lenth1,lenth2);
swap(num1,num2);
}
for(int j=1;j<=lenth2;j++)
{
int t = num1[lenth1-j] - '0' + num2[lenth2-j] - '0' + k;
ans[cnt++] = t%10;
if(t>9) k = 1;
else k = 0;
}
for(int j=lenth2+1;j<=lenth1;j++)
{
int t = num1[lenth1-j] - '0' + k;
ans[cnt++] = t%10;
if(t>9) k = 1;
else k = 0;
}
if(k!=0) ans[cnt++] = 1;
for(int j=cnt-1;j>=0;j--)
{
printf("%d",ans[j]);
}
printf("%s",i==N?"\n":"\n\n");
}
return 0;
}