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;
    }
  • 相关阅读:
    GitLab用户权限管理
    类似vant中的tab实现
    Gitgitee/github/gitlab账号分离
    Vim操作
    partition by 用法
    crontab执行feat_gen.sh时,报错找不到pyspark
    SQL同一个字段出现null和0值,有何区别,原因是什么?left join导致null值出现,case when导致0值出现
    linux 定时任务crontab的用法
    卡方检验
    ROC与AUC
  • 原文地址:https://www.cnblogs.com/expedition/p/11629793.html
Copyright © 2011-2022 走看看