【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;
}
相关推荐
Rabitebla6 小时前
【Linux 底层原理】进程(十):进程等待详解---从僵尸进程到 wait、waitpid 与 status
linux·c++·笔记·学习·visual studio
西西弗Sisyphus8 小时前
C++ 超时互斥锁(Timed Mutex):std::timed_mutex 与 std::unique_lock
c++
今天要早睡_10 小时前
C++01_入门基础复习
开发语言·c++
Fuyo_111913 小时前
C++ 运行时多态与虚函数机制全面剖析【面试重点】
开发语言·c++·面试
Chen_harmony15 小时前
七、STL与string类
开发语言·c++
xxxiugou12315 小时前
C++命名空间与引用全解析
开发语言·c++
用户76241175670516 小时前
第十五章 人工智能基础
c++
爱写Bug的浮游19 小时前
unique_ptr 零开销的真相与边界
c++·facebook
xiaoye-duck19 小时前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(下):流式响应实现和测试
网络·c++·语言模型·chatgpt
落樱弥城21 小时前
Perf 逐步探查性能缺口并优化
c++·性能优化