题解:AcWing 791 高精度加法

【题目来源】

AcWing:791. 高精度加法 - AcWing题库

【题目描述】

给定两个正整数(不含前导 ),计算它们的和。

【输入】

共两行,每行包含一个整数。

【输出】

共一行,包含所求的和。

【输入样例】

12
23

【输出样例】

35

【解题思路】

image

【算法标签】

《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