• 高精度加法


    高精度加法
    题目描述
    输入两个正整数(最多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;
    }
  • 相关阅读:
    【交互稿】sample
    【公开数据】网站
    【交互】规范
    【Flask】https
    【Flask】run with ssl /https
    需求模版
    低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端
    AIDL示例
    Android使用BLE(低功耗蓝牙,Bluetooth Low Energy)
    Android网络访问库
  • 原文地址:https://www.cnblogs.com/DERZHAO/p/8525152.html
Copyright © 2020-2023  润新知