top1编程
← 返回题目
题解

大整数加法

1 条题解

  • 0
    @ 2026-8-3 18:46:46

    解题思路

    有多组数据,每组两个大整数(不超过 10^25),求它们的和。这要用高精度加法:把两个数按字符串读入,转成数组时个位放最前面,然后逐位相加、超过 10 进位。

    因为有多组,每处理完一组要把数组清空再算下一组,最后按组输出结果。

    参考代码

    #include <iostream>
    using namespace std;
    
    char sa[30], sb[30];
    int a[30], b[30], ans[35];
    
    int main() {
        int t;
        cin >> t;
        while (t--) {
            cin >> sa >> sb;
            // 求两个数位数
            int la = 0, lb = 0;
            while (sa[la]) la++;
            while (sb[lb]) lb++;
            // 清空数组
            for (int i = 0; i < 30; i++) { a[i] = 0; b[i] = 0; }
            for (int i = 0; i < 35; i++) ans[i] = 0;
            // 转数组,个位放最前面
            for (int i = 0; i < la; i++) a[i] = sa[la - 1 - i] - '0';
            for (int i = 0; i < lb; i++) b[i] = sb[lb - 1 - i] - '0';
            // 逐位相加
            int n = (la > lb) ? la : lb;
            for (int i = 0; i < n; i++) {
                ans[i] += a[i] + b[i];
                ans[i + 1] += ans[i] / 10;
                ans[i] %= 10;
            }
            int hi = n;
            while (ans[hi]) hi++;
            // 输出
            for (int i = hi - 1; i >= 0; i--) cout << ans[i];
            cout << endl;
        }
        return 0;
    }
    

    复杂度分析

    每组数据都扫一遍两个数,设位数为 n,单组时间复杂度 O(n);额外空间复杂度 O(n)。

    • 1