高精度加法

高精度加法就是用来计算两个远远超过long long范围的大整数相加的方法。它的核心思想非常简单:模拟我们手算竖式加法

加法步骤

假设两个大数 A 和 B 已经转成上述的小端序数组。我们做加法:

  1. 从 i = 0 开始,依次处理每一位。
  2. 将 A[i] + B[i] + 进位值 相加,得到 sum
  3. 当前结果位 = sum % 10,新的进位 = sum / 10
  4. 继续处理下一位,直到两个数的所有位都处理完,并且进位为0为止。

代码实现

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

// 将字符串转为小端序 vector
vector<int> strToVec(const string &s) {
    vector<int> v;
    for (int i = s.size() - 1; i >= 0; --i)
        v.push_back(s[i] - '0');
    return v;
}

// 高精度加法
vector<int> add(const vector<int> &a, const vector<int> &b) {
    vector<int> c;
    int carry = 0;   // 进位
    int i = 0;
    // 只要还有数没加完或者还有进位,就继续
    while (i < a.size() || i < b.size() || carry) {
        int sum = carry;
        if (i < a.size()) sum += a[i];
        if (i < b.size()) sum += b[i];
        c.push_back(sum % 10);   // 当前位
        carry = sum / 10;        // 新的进位
        ++i;
    }
    return c;
}

// 输出大数(将小端序转为正常字符串输出)
void printVec(const vector<int> &v) {
    for (int i = v.size() - 1; i >= 0; --i)
        cout << v[i];
    cout << endl;
}

int main() {
    string s1, s2;
    cin >> s1 >> s2;
    vector<int> a = strToVec(s1);
    vector<int> b = strToVec(s2);
    vector<int> result = add(a, b);
    printVec(result);
    return 0;
}

注意数据范围,是否存在负数或特殊符号,需要特殊处理。