zoukankan      html  css  js  c++  java
  • 计蒜客 —— 大整数加法

    大整数加法

    求两个不超过 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;
    }
  • 相关阅读:
    Sprinig.net 双向绑定 Bidirectional data binding and data model management 和 UpdatePanel
    Memcached是什么
    Spring.net 网络示例 codeproject
    jquery.modalbox.show 插件
    UVA 639 Don't Get Rooked
    UVA 539 The Settlers of Catan
    UVA 301 Transportation
    UVA 331 Mapping the Swaps
    UVA 216 Getting in Line
    UVA 10344 23 out of 5
  • 原文地址:https://www.cnblogs.com/expedition/p/11629793.html
Copyright © 2011-2022 走看看