普通大数相加:
(1)超时: while循环条件不改变,导致死循环
(2)wa: s1,s2为字符串,len1=strlen(s1),len2=strlen(s2);
swap(s1,s2)后,没有交换len1,len2
(3)格式错误: 最后一行不要换行,每两个测试样例之间换行。
看来我的菜是永无止境的,下次写代码,记得注意:
1. 题目要求的输出格式
2. 仔细想想每一条语句对上面的变量是否会造成影响。
3. 输出的时候多测试,随机数测试也是有必要的,必须把所有可能情况都测一遍再交。
#include<iostream> #include<cstdio> #include<cstring> #include<string> #define ll long long using namespace std; #define maxn 1220 #define rep(i,a,b) for(int i=(a);i<(b);i++) char s1[maxn],s2[maxn]; char ss1[maxn],ss2[maxn]; int ans1[maxn*10]; int ans2[maxn*10]; int t1=0; int t2=0; int main(){ int t; cin>>t; for(int kk=0;kk<t;kk++){ t1=t2=0; scanf("%s %s",s1,s2); strcpy(ss1,s1); strcpy(ss2,s2); int l1=strlen(ss1); int l2=strlen(ss2); // cout<<l1<<" "<<l2<<endl; int len1=strlen(s1); int len2=strlen(s2); if(len1<len2){ swap(s1,s2); } len1=strlen(s1); len2=strlen(s2); int i1,i2; i1=len1-1,i2=len2-1; int jin=0; while(i1>=0&&i2>=0){ int x1=s1[i1]-'0'; int x2=s2[i2]-'0'; ans1[t1++]=(x1+x2+jin)%10; jin=(x1+x2+jin)/10; i1--,i2--; } while(i1>=0){ int x1=s1[i1--]-'0'; ans1[t1++]=(x1+jin)%10; jin=(x1+jin)/10; } if(jin) ans1[t1++]=jin; for(int i=t1-1;i>=0;i--){ ans2[t2++]=ans1[i]; } printf("Case %d: ",kk+1); rep(o,0,l1) printf("%c",ss1[o]); cout<<" + "; rep(o,0,l2) printf("%c",ss2[o]); cout<<" = "; rep(i,0,t2) printf("%d",ans2[i]); puts(""); if(kk!=t-1) puts(""); } return 0; }