杭电1002
A + B问题II时间限制:2000/1000 MS(Java /其他)内存限制:三万二千七百六十八分之六万五千五百三十六K(Java /其他的)
总提交(S):141254接受提交的文件:26797
问题描述
我有一个非常简单的问题。由于两个整数A和B,你的任务是计算A + B的总和
输入
在输入的第一行包含一个整数T(1 <= T <= 20),这意味着测试用例的数量。那么T线跟随,每行包含两个正整数,A和B请注意,这个整数是非常大的,这意味着你不应该使用32位的整数处理。你可以假设每个整数的长度不会超过1000。
产量
对于每个测试案例,你应该输出两行。第一行是“案例#:”#指的测试用例的数量。第二行是一个公式“A + B = SUM”,总和是指A + B.注意的结果有一定的空间int的方程。两个测试用例之间输出一个空行。
样例输入
2
1 2
112233445566778899 998877665544332211
样本输出
案例1://Case 1:
1 + 2 = 3
案例2://这里应该是Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
以上是翻译过来的
我的代码
程序代码:#include"stdio.h"
#include"string.h"
#include"stddef.h"
int main()
{
char a[1001],b[1001];
int n,i,j,mi,k,l;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
int x[1001]={0};
for(j=0;j<1001;j++)
{
scanf("%c",&a[j]);
if(a[j]==' ')
{
a[j]='\0';break;
}
}
gets(b);
//printf("%s%s\n",b,a);
//printf("%d,%d\n",strlen(a),strlen(b));
for(j=strlen(a)-1,k=strlen(b)-1,l=0;j>=0&&k>=0;j--,k--,l++)
{
x[l]+=a[j]+b[k]-48*2;//printf("x[%d]=%d\n",j,x[j]);
if(x[l]>=10)
{
x[l+1]+=x[l]/10;
x[l]=x[l]%10;
if(j-1<0&&k-1<0&&strlen(a)==strlen(b))
{
l++;
}
}
}
if(strlen(a)<strlen(b))
{
for(j=strlen(a);j<strlen(b);j++,l++)
{x[l]+=b[j]-48;
if(x[l]>=10)
{x[l+1]+=x[l]/10;x[l]=x[l]%10;
if(j+1>=strlen(b))
{l+=2;break;}
}}
}
else if(strlen(a)>strlen(b))
{
for(j=strlen(b);j<strlen(a);j++,l++)
{x[l]+=a[j]-48;
if(x[l]>=10)
{x[l+1]+=x[l]/10;x[l]=x[l]%10;
if(j+1>=strlen(a))
{l+=2;break;}
}}
}
printf("Case %d:\n%s + %s = ",i+1,a,b);
for(j=l-1;j>=0;j--)
printf("%d",x[j]);
printf("\n");
if(i+1<n)
printf("\n");
}
return 0;
}这道是在论坛里看到有人求助,自己去写了下
测试时答案应该没有错
个人觉得是格式错误
但交了后是WA
求解释










,想了好久了