ps:wa了好多次,然后才发现是输入的时候%s和%s要隔开一个空格,我想当然了...

代码:

#include "stdio.h"
#include "string.h"
char a[100000];
char b[100000];
char c[100000];
char d[100000];
int cal();
int main(){
    int i,n1,n2,T,ncase=1;
    scanf("%d",&T);
    getchar();
    while(T--){
        scanf("%s %s",&a,&b);
        memset(c,'\0',sizeof(c));   //字符串清空 
        memset(d,'\0',sizeof(d));
        cal();
        n1=strlen(c);    //c用来存算得后的结果,d是c不够位了就存在d 
        n2=strlen(d);
        if(ncase!=1) puts("");
        printf("Case %d:\n",ncase++);
        printf("%s + %s = ",a,b);
        if(n2>0) printf("%c",d[0]);
        for(i=0;i<n1;i++){
            printf("%c",c[i]);
        }
        puts("");
        memset(a,'\0',sizeof(a));  //重新清空a和b 
        memset(b,'\0',sizeof(b));
    }
    return 0;
}
int cal(){
    int i,flag,j,n1,n2,m,flag1,m1,k1,k2;
    int c1,d1,sum;
    n1=strlen(a);   //判断a和b的长度 
    n2=strlen(b);
    if(n1>n2){   
        m1=n1;    
        flag=0;   //flag用来记录谁长... 
    }
    else if(n1<n2){
        m1=n2;
        flag=1;
    }
    else if(n1==n2){
        m=n1;
        flag=2;
    }
    flag1=0;
    for(;n1>0 && n2>0;n1--,n2--){
        c1=a[n1-1]-'0';    //转成整数来相加 
        d1=b[n2-1]-'0';       
        if(c1+d1+flag1>=10){
            sum=c1+d1-10+flag1;    //判断是否需要进位 
            flag1=1;    
        }
        else if(c1+d1+flag1<10){
            sum=c1+d1+flag1;
            flag1=0;
        }
        c[(n1>n2?n1-1:n2-1)]=sum+'0';       //放到c组 
    }
    if(flag==0){    //如果是a长度比b长度长.. 
        m=n1-n2;
        for(i=m-1;i>=0;i--){
            sum=(a[i]-'0')+flag1;
            if(sum>=10){
                flag1=1;
                c[i]=sum-10+'0';
            }
            else{
                flag1=0;
                c[i]=sum+'0';
            }
        }
        if(flag1==1){
            d[0]='1';
            d[1]='\0';
        }
        c[m1]='\0';
    }
    else if(flag==1){
        m=n2-n1;
        for(i=m-1;i>=0;i--){
            sum=(b[i]-'0')+flag1;
            if(sum>=10){
                flag1=1;
                c[i]=sum-10+'0';
            }
            else{
                flag1=0;
                c[i]=sum+'0';
            }
        }
        if(flag1==1){   //如果位数超出了c数组,用d数组来存 
            d[0]='1';
            d[1]='\0';
        }
        c[m1]='\0';
    }
    else if(flag==2){   //如果位数相同...用d数组来存.. 
        c[m]='\0';
        if(flag1>0){
            d[0]='1';
            d[1]='\0';
        }
        else{
            d[0]='\0';
        }
    }
    return flag;
}