大数加法

作为一名划水与各种领域的全不能型玩家,终于来到了C语言开始划水,为保持“划水”精神,磕磕盼盼的终于完整的写完一个“大数”类型的题目:

输入数据的第一行为一个整数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
#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    scanf("%d",&n);
    for(int m=1;m<=n;m++){
        printf("Case %d:\n",m);
    char st1[1001],st2[1001];//大数嘛,自然可能很多位,那就用字符串存
    int st3[1001]={0},st4[1001]={0},len1,len2,a,b,max;
    scanf("%s %s",&st1,&st2);
    printf("%s + %s = ",st1,st2);
    len1=strlen(st1);
    len2=strlen(st2);\\计算读入字符串长度
    if(len1>len2){
        max=len1;
    }else{
        max=len2;
    }\\判断最多位,为最后输出做准备
    for(a=len1-1,b=0;a>=0;a--){
        st3[b++]=st1[a]-'0';\\将字符串的每一个字符转变为具体的数并存入数组
    }
    for(a=len2-1,b=0;a>=0;a--){
        st4[b++]=st2[a]-'0';\\同上
    }
    for(a=0;a<1001;a++){
            st3[a]+=st4[a];
            if(st3[a]>9){
                st3[a]=st3[a]-10;
                st3[a+1]++;
            }
    }\\数组相加
    for(a=max;a>=0;a--){
        if(st3[max]==0){
            st3[max]=1;
            continue;
        }\\判断最高位的位置
        if(a==0&&m!=n){
            printf("%d\n\n",st3[a]);
        }else if(a!=0){
            printf("%d",st3[a]);
        }else if(a==0&&m==n){
            printf("%d\n",st3[a]);
        }
    }
    }
    return 0;
 } 

 

Sample Output

Case 1:
1 + 2 = 3

Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
划水嘛,自然就要慢慢划,作为初学者,也就几个小时,相加搞完,应该减乘除应该也能慢慢划出来了吧?!

posted on 2021-01-17 21:59  云の海  阅读(66)  评论(0编辑  收藏  举报

导航