HDU

普通大数相加:


(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;
}

  

原文地址:https://www.cnblogs.com/pipitongkw1/p/10632507.html