实现思路:A、B两个整数分别存于a[],b[]。设置一个结数组c[],设置一个进位t,表示两个整数对应位相加时的进位,初始为0,后续每次相加结果为a[i]+b[i]+t。相加结果%10为余数,存入c[i];相加结果/10为进位值即t。
具体实现代码(详解版):
#include <iostream>
#include <vector>
using namespace std;
// A 和 B 存储两个大整数
vector<int> A, B;
// 大整数加法函数,将两个大整数相加,返回结果存储在 vector 中
vector<int> add(vector<int> &A, vector<int> &B) {
vector<int> C; // 存储结果
int t = 0; // 进位标志,初始为0
// 循环遍历 A 和 B 的各位,直到最长的那个数组遍历完
for (int i = 0; i < A.size() || i < B.size(); i++) {
if (i < A.size()) t += A[i]; // 如果 A 还没遍历完,加上 A[i] 的值
if (i < B.size()) t += B[i]; // 如果 B 还没遍历完,加上 B[i] 的值
C.push_back(t % 10); // 只保留当前位的值(即个位数)
t /= 10; // 将进位值保存到 t 中(t > 10 时需要进位)
}
if (t) C.push_back(t); // 如果最后还有进位,将进位加入结果中
return C;
}
int main() {
string a, b;
cin >> a >> b;
// 将字符串 a 和 b 的每一位数字逆序存入数组 A 和 B 中
// 例如字符串 "123" 会变为 A = {3, 2, 1}
for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0'); // 将字符转为整数并存入 A
for (int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0'); // 将字符转为整数并存入 B
// 调用 add 函数,计算两个大整数的和,结果存入 C
vector<int> C = add(A, B);
// 结果 C 是逆序存储的,所以需要逆序输出
for (int i = C.size() - 1; i >= 0; i--) cout << C[i];
return 0;
}