杭电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
求解释