题解: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
posted @ 2026-02-20 22:19  团爸讲算法  阅读(2)  评论(0)    收藏  举报