计蒜客 —— 大整数加法

大整数加法

求两个不超过 200 位的非负整数的和。

输入格式

有两行,每行是一个不超过 200 位的非负整数,可能有多余的前导 0

输出格式

一行,即相加后的结果。结果里不能有多余的前导 0,即如果结果是 342,那么就不能输出为 0342

输出时每行末尾的多余空格,不影响答案正确性

样例输入

22222222222222222222
33333333333333333333

样例输出

55555555555555555555

坑点:

  • 模拟各位相加及进位的逻辑
  • 前导 0 ,最后几个测试数据有好几位前导 0 ,这些 0 都不能输出,最后一组测试数据则全都是 0 。。。 只能输出最后一个 0 

坑死了。。。

#include<stdio.h>

int a[201];
int b[201];
int c[300];

int main(){
    int i = 0;
    char cc;
    while( (cc = getchar() )!= '
' ){
        a[i] = cc - 48;
        i++;
    }
    int j = 0;
    while( (cc = getchar() )!= '
'  ){
        b[j] = cc - 48;
        j++;
    }
    // 上方是两个大整数的输入过程
    int x = 0;
    i--;
    j--;
    int jw = 0;
    // 模拟加法运算及进位逻辑
    while(i >= 0 && j >= 0){
        int u = a[i] + b[j] + jw;
        jw = 0;
        if( u >= 10){
            c[x] = u % 10;
            jw = u /10;
            x++;
            i--;
            j--;
        }else{
            c[x] = u;
            jw = 0;
            j--;
            i--;
            x++;
        }
    }
    // 两个大整数有一个大整数的所有位已经参与运算,判断是哪个大整数还有数位剩余
    if(i == -1 && j != -1){
        while(j != -1){
            int pp = jw + b[j];
            jw = 0;
            if(pp >= 10){
                c[x] = pp % 10;
                jw = pp /10;
                x++;
            }else{
                c[x] = pp;
                x++;
            }
            j--;
        }


    }
    if(i != -1 && j == -1){
        while(i != -1){
            int pp = jw + a[i];
            jw = 0;
            if(pp >= 10){
                c[x] = pp % 10;
                jw = pp /10;
                x++;
            }else{
                c[x] = pp;
                x++;
            }
            i--;
        }
    }
    if(i == -1 && j == -1){
        if(jw != 0){
            c[x] = jw;
            x++;
        }
    }
    x--;
    int flag = 1;
    // 解释见上方的  坑点
    for(int r = x;r > 0;r--){
        if(c[r] == 0 && flag == 1)
            continue;
        else
        {
            printf("%d",c[r]);
            flag = 0;
        }
    }
    printf("%d",c[0]);
    return 0;
}
原文地址:https://www.cnblogs.com/expedition/p/11629793.html