zoukankan      html  css  js  c++  java
  • 高精度加法

    高精度加法
    题目描述
    输入两个正整数(最多100000 位),输出它们的和。
    输入
    两行,两个整数。
    输出
    一行,一个整数
    样例输入
    999999999999999999999999999999999999999999999999999999
    12345678999999999999999999999999
    样例输出
    1000000000000000000000012345678999999999999999999999998

    看这个数据范围,就是需要高精度加法。

    模拟电脑做竖式加法

    首先我们用数组存这两个数。为了方便读入,我们采用字符串读入,然后将其转化成数字存进数组中。存进数组的时候要倒着存入,为什么呢?这样的话就能保证两个数的每一位都对齐了,为接下来的模拟列竖式提供了很大的便利。

    模拟列竖式其实也不必多说,写法也不少。其实关键在于进位的问题,先进位,在把这一位的两数相加。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #define N 100005
    using namespace std;
    char a1[N]= {0},b1[N]= {0};
    int a[N]= {0},b[N]= {0},c[N]= {0};
    int a1len,b1len,lenc,x;
    int main() {
        freopen("bigadd.in","r",stdin);
        freopen("bigadd.out","w",stdout);
        char a1[N],b1[N];
        int a[N]= {0},b[N]= {0},c[N]= {0};
        int a1len,b1len,lenc,x,i;
        gets(a1);
        gets(b1);
        a1len=strlen(a1);
        b1len=strlen(b1);
        for( i=0; i<=a1len; ++i) {
            a[a1len-i]=a1[i]-48;
        }
        for( i=0; i<=b1len; ++i) {
            b[b1len-i]=b1[i]-48;
        }
        lenc=1;
        x=0;
        while(lenc<=a1len||lenc<=b1len) {
            c[lenc]=a[lenc]+b[lenc]+x;
            x=c[lenc]/10;
            c[lenc]=c[lenc]%10;
            lenc++;
        }
        c[lenc]=x;
        if(c[lenc]==0) {
            lenc--;
        }
        for( i=lenc; i>=1; i--)
            cout << c[i];
        cout << endl;
        return 0;
    }
  • 相关阅读:
    shell脚本中生成延时
    linux小技巧
    自定义微信圈分享带的图片和内容
    OOM killer
    svn报错
    Fatal error: Call-time pass-by-reference has been removed
    ThinkPHP3.1.3源码分析---php文件压缩zlib.output_compression 和 ob_gzhandler
    确保 PHP 应用程序的安全
    判断来自电脑还是手机
    以About Us为范例在Zen cart中增加页面
  • 原文地址:https://www.cnblogs.com/DERZHAO/p/8525152.html
Copyright © 2011-2022 走看看