今天是水题记录第三天,尝试了水一下大数加法,发费了好多时间0-0.0-0

题目如下

绝对没有坑

这道题就是一道很正常的A+B
绝对没有坑o(* ̄▽ ̄*)o
Input输入数据的第一行为一个整数T(1≤T≤20),表示测试数据总数,紧接着的T行数据,每行包含由空格隔开的两个整数a和b,每组数据占一行。注意了,a和b可能非常大,大到超过32位整数可以表示的范围,我们假定a和b的位数不超过1000。 
Output对于每组数据,你需要输出两行,第一行显示"Case #:"(注意输出为英文字符),第二行为一个等式"a + b = Sum",这里的Sum就是指a + b的结果(注意这个等式中的空格)。请在每两组输出数据间输出一个空行。 
Sample Input

2
1 2
112233445566778899 998877665544332211

Sample Output

Case 1:
1 + 2 = 3

Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
我的代码
#include<stdio.h>
#include<string.h>
int main(){
    int a;
    int max;
    scanf("%d",&a);
    char s[1005];
    char ch[1005];
    for(int i=0;i<a;i++){
        int o=0;
        int p=0;
        int sum[1005]={0};
        int s1[1005]={0};
        int ch1[1005]={0};
        scanf("%s",&s);
        getchar();
        scanf("%s",&ch);
        int len=strlen(s);
        int len1=strlen(ch);
        if(len>len1)max=len;
        else max=len1;
        for(int j=0;j<=max;j++){
            s[j]=s[j]-'0';
            ch[j]=ch[j]-'0';
        }
        for(int j=len-1;j>=0;j--){
            s1[o]=s[j];
            o++;
            }
            for(int j=len1-1;j>=0;j--){
            ch1[p]=ch[j];
            p++;
            }
        for(int j=0;j<max;j++){
            sum[j]=sum[j]+s1[j]+ch1[j];
            if(sum[j]>9){
                sum[j]=sum[j]%10;
                sum[j+1]++;
            }
        }
        printf("Case %d:\n",i+1);
        for(int j=len-1;j>=0;j--){
            printf("%d",s1[j]);
        }
        printf(" + "); 
        for(int j=len1-1;j>=0;j--){
            printf("%d",ch1[j]);
        }
        printf(" = ");
        if(sum[max]!=0)printf("%d",sum[max]);
        for(int j=max-1;j>=0;j--){
            printf("%d",sum[j]);    
        }
        if(i!=a-1)
        printf("\n\n");
        else printf("\n");
    }
    return 0;
} 

水题真累!!~~~~

posted on 2021-01-18 22:14  TYoUer  阅读(78)  评论(0)    收藏  举报