【AcWing】【C++】高精度加减法模板

高精度加减法模板

这一部分来自于AcWing算法基础课中高精度加减法模板的重新实现,使用C++进行编程,与y总给出的模板基本一致。

亮点在于使用C++的vector来对大整数进行存储,在本科阶段的C语言课程中,通常使用char数组来对大整数进行保存并直接参与运算,后者较难理解。

高精度加法

cpp 复制代码
#include <vector>
#include <string>
#include <iostream>
using namespace std;

string a, b;
vector<int> A, B;

vector<int> add(vector<int> &A, vector<int> &B) {
    int t = 0;
    vector<int> C;
    for(int i=0; i<A.size() || i<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(1);
    }
    return C;
}

int main() 
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> a >> b;

    for(int i=a.size()-1; i>=0; i--)    A.push_back(a[i] - '0');
    for(int i=b.size()-1; i>=0; i--)    B.push_back(b[i] - '0');

    auto C = add(A, B);
    for(int i=C.size()-1; i>=0; i--)    cout << C[i];
    return 0;
}

高精度减法

cpp 复制代码
#include <vector>
#include <string>
#include <iostream>
using namespace std;

string a, b;
vector<int> A, B;

vector<int> sub(vector<int> &A, vector<int> &B) {
    vector<int> C;
    for(int i=0, t=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[C.size()-1] == 0 && C.size() > 1)   C.pop_back();
    return C;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> a >> b;
    bool swap_flag = false;
    if((a.length() > b.length()) || (a.length() == b.length() && a > b)) {
        swap(a, b);
        swap_flag = true;
    }

    for(int i=a.length()-1; i>=0; i--)  A.push_back(a[i] - '0');
    for(int i=b.length()-1; i>=0; i--)  B.push_back(b[i] - '0');

    auto C = sub(B, A);
    if(swap_flag && C.size() != 0 && C[C.size()-1] != 0)    cout << "-";
    for(int i=C.size()-1; i>=0; i--)    cout << C[i];
    return 0;
}
相关推荐
小坏坏的大世界3 小时前
C++ STL常用容器总结(vector, deque, list, map, set)
c++·算法
liulilittle4 小时前
C++ TAP(基于任务的异步编程模式)
服务器·开发语言·网络·c++·分布式·任务·tap
励志要当大牛的小白菜5 小时前
ART配对软件使用
开发语言·c++·qt·算法
PAK向日葵6 小时前
【算法导论】如何攻克一道Hard难度的LeetCode题?以「寻找两个正序数组的中位数」为例
c++·算法·面试
QQ_43766431410 小时前
C++11 右值引用 Lambda 表达式
java·开发语言·c++
liulilittle12 小时前
C++/CLI与标准C++的语法差异(一)
开发语言·c++·.net·cli·clr·托管·原生
小狄同学呀12 小时前
VS插件报错,g++却完美编译?API调用错因分析
c++
程序员编程指南12 小时前
Qt 数据库连接池实现与管理
c语言·数据库·c++·qt·oracle
小乖兽技术12 小时前
C#与C++交互开发系列(二十四):WinForms 应用中嵌入C++ 原生窗体
c++·c#·交互
张北北.12 小时前
【深入底层】C++开发简历4+4技能描述6
java·开发语言·c++