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;
    }
  • 相关阅读:
    Codeforces 662D International Olympiad【贪心】
    LightOJ 1236 Pairs Forming LCM【整数分解】
    LightOJ 1341 Aladdin and the Flying Carpet【整数分解】
    LightOJ 1370 Bi-shoe and Phi-shoe【欧拉函数 && 质数】
    SGU 106 The equation【扩展欧几里得】
    unity 第三人称控制移动
    unity Animator做简单的人物动画
    unity 背包系统
    unity 针对UI的射线穿透的两种方式
    用角色控制器控制移动和碰撞
  • 原文地址:https://www.cnblogs.com/expedition/p/11629793.html
Copyright © 2011-2022 走看看