高精度加法

P1601 A+B Problem(高精)

读入数据时,四种运算均从个位数开始push_back,输出时从vector最高位开始。
需要取尾0:
减(高位可能被减为0)、乘(乘以0后全为0)、除(得到的结果高位可能为0)

复制代码
vector<int> add(vector<int> a, vector<int> b) {
    vector<int> c;
    int t = 0;
    for(int i = 0; i < max(a.size(), b.size()); i++) {
        if(i < a.size()) 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;
}
复制代码

高精度减法

P2142 高精度减法

如果当前这一位计算后,t < 0,令t = 1借一位,否则表示没有借位,令t = 0
push_back一个正数,即(t + 10) % 10;

复制代码
vector<int> sub(vector<int> a, vector<int> b) {
    vector<int> c;
    int t = 0;
    for(int i = 0; i < a.size(); i++) {
        t = a[i] - t;
        if(i < b.size()) t -= b[i];
        c.push_back((t + 10) % 10);
        if(t < 0) t = 1;
        else t = 0;
    }
    while(c.size() > 1 && c.back() == 0) c.pop_back();
    return c;
}
复制代码

高精度乘法

P1303 A*B Problem

t最好在for里面做完,如果写成if(t) c.push_back(t);

在连乘时会出问题。

b太大,t需要开long long

复制代码
vector<int> mul(vector<int> a, int b) {
    vector<int> c;
    int t = 0;
    for(int i = 0; i < a.size() || t; i++) {
        if(i < a.size()) t += a[i] * b;
        c.push_back(t % 10);
        t /= 10;
    }
    while(c.size() > 1 && c.back() == 0) c.pop_back();
    return c;
}
复制代码
复制代码
vector<int> mul(vector<int> a, vector<int> b) {
    vector<int> c(a.size() + b.size() + 10);
    for(int i = 0; i < a.size(); i++)
        for(int j = 0; j < b.size(); j++)
            c[i + j] += a[i] * b[j];
    for(int i = 0; i < c.size(); i++)
        c[i + 1] += c[i] / 10, c[i] %= 10;
    while(c.size() > 1 && c.back() == 0) c.pop_back();
    return c;
}
复制代码

高精度除法

P1480 A/B Problem

注意除数的大小,如果 > 1e9,r需要开long long

复制代码
vector<int> div(vector<int> a, int b) {
    vector<int> c;
    long long r = 0;
    for(int i = a.size() - 1; i >= 0; i--) {
        r = r * 10 + a[i];
        c.push_back(r / b);
        r %= b;
    }
    reverse(c.begin(), c.end());
    while(c.size() > 1 && c.back() == 0) c.pop_back();
    return c;
}
复制代码

 

posted on   我疯故我在  阅读(120)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效



点击右上角即可分享
微信分享提示