题解:AcWing 791 高精度加法
【题目来源】
AcWing:791. 高精度加法 - AcWing题库
【题目描述】
给定两个正整数(不含前导 ),计算它们的和。
【输入】
共两行,每行包含一个整数。
【输出】
共一行,包含所求的和。
【输入样例】
12
23
【输出样例】
35
【解题思路】

【算法标签】
《AcWing 791 高精度加法》 #高精度#
【代码详解】
#include <bits/stdc++.h>
using namespace std;
// 大整数相加函数
vector<int> add(vector<int> &A, vector<int> &B) {
vector<int> C; // 存储结果
int t = 0; // 进位值,初始为0
// 逐位相加
for (int i = 0; i < A.size() || i < B.size(); i++) {
// 如果A还有位数,加上A的当前位
if (i < A.size()) t += A[i];
// 如果B还有位数,加上B的当前位
if (i < B.size()) t += B[i];
// 存储当前位的和(取模10)
C.push_back(t % 10);
// 计算进位
t /= 10;
}
// 处理最高位的进位
if (t) C.push_back(1);
return C;
}
int main() {
string a, b; // 以字符串形式存储输入的大数
vector<int> A, B; // 存储转换后的数字(逆序存储)
// 输入两个大数
cin >> a >> b;
// 将字符串转换为数字并逆序存储
// 例如:"123456" → [6,5,4,3,2,1]
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;
}
【运行结果】
12
23
35
浙公网安备 33010602011771号