高精度

高精度是计算极大数的基础算法,四个算法为:加、减 、乘和除。

加法

按照竖式加法来计算。

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

vector<int> add(vector<int> a, vector<int> b){
    if (b.size() > a.size()) return add(b, a);
    vector<int> c;
    int t = 0;  // 进位
    for (int i = 0; i < a.size(); i ++){
        t += a[i];
        if (i < b.size()) t += b[i];
        c.push_back(t % 10);
        t /= 10;
    }
    if (t) c.push_back(t);
    return c;
}

int main(){
    string s1, s2;
    vector<int> a, b;
    cin >> s1 >> s2;
    
    for (int i = s1.size() - 1; i >= 0; i --) a.push_back(s1[i] - '0');
    for (int i = s2.size() - 1; i >= 0; i --) b.push_back(s2[i] - '0');
    
    auto c = add(a, b);
    
    for (int i = c.size() - 1; i >= 0; i --) cout << c[i];
    return 0;
}

减法

按照竖式减法计算。减法有几个 tricky 点,当减法的时候,我们要比较大小,用大的减小的,还有减法会令结果出现前导零,需要排除。

高精度乘法

高精度-单精度

1A的长度100000,0B100001≤A的长度≤100000, 0≤B≤10000

高精度除法

1A的长度100000,1B10000,B一定不为01≤A的长度≤100000, 1≤B≤10000, B 一定不为 0

最后更新于