题目:
Solution:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> add(vector<int> &A, vector<int> &B) {
vector<int> C;
int t = 0;
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() {
string a, b;
cin >> a >> b;
vector<int> 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--) printf("%d", C[i]);
return 0;
}
- 定义一个函数add,接收两个参数A和B,分别表示两个正整数的每一位数字。
- 创建一个空数组C,用于存储结果。
- 初始化一个变量t为0,用于记录进位。
- 从个位开始遍历A和B的每一位数字,对应的索引为i。在每一位上执行以下步骤:
- 如果i小于A的长度,将A[i]加到t上。
- 如果i小于B的长度,将B[i]加到t上。
- 将t对10取余数,并将结果添加到C数组中。
- 将t除以10,更新t为商,用于下一位的计算。
- 遍历完所有位数后,如果t大于0,说明最高位有进位,将t添加到C数组中。
- 返回C数组作为结果。
- 在主函数中,读入两个正整数a和b。
- 创建两个空数组A和B,分别用于存储a和b的每一位数字。
- 从个位开始遍历a和b的每一位字符,将字符转换为数字,并倒序存储到A和B数组中。
- 调用add函数,传入A和B数组,获取计算结果C。
- 从C数组的最高位开始,倒序输出每一位数字,即为高精度加法的结果