题解:洛谷 P1601 高精度加法

【题目来源】

洛谷:P1601 A+B Problem(高精) - 洛谷 (luogu.com.cn)

【题目描述】

高精度加法,相当于 a+b problem,不用考虑负数

【输入】

分两行输入。\(a,b\le 10^{500}\)

【输出】

输出只有一行,代表 \(a+b\) 的值。

【输入样例】

1001
9099

【输出样例】

10100

【算法标签】

《洛谷 P1601 A+B Problem(高精)》 #字符串# #高精度#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

// 高精度加法函数:计算两个大整数的和
int aplusb(string a, string b, int *c) 
{
    int j1[505] = {0}, j2[505] = {0};  // j1 和 j2 用于存储两个大整数的每一位数字
    int jw = 0;  // jw 用于存储进位
    int lena = a.length(), lenb = b.length();  // lena 和 lenb 分别表示两个大整数的长度
    int len = max(lena, lenb);  // len 表示两个大整数中较长的长度

    // 将字符串 a 和 b 转换为 int 数组并翻转(方便从低位到高位计算)
    for (int i = 0; i < lena; i++) j1[i] = a[lena - i - 1] - '0';  // 将 a 的每一位字符转换为数字并翻转
    for (int i = 0; i < lenb; i++) j2[i] = b[lenb - i - 1] - '0';  // 将 b 的每一位字符转换为数字并翻转

    // 逐位相加
    for (int i = 0; i < len; i++) 
	{
        c[i] = j1[i] + j2[i] + jw;  // 当前位的和 = j1[i] + j2[i] + 进位 jw
        jw = c[i] / 10;  // 计算新的进位
        c[i] = c[i] % 10;  // 当前位只保留个位数
    }

    // 如果最高位有进位,需要增加结果的长度
    if (jw > 0) 
	{
        c[len] = jw;  // 将进位存储到最高位
        len++;  // 结果长度加 1
    }

    return len;  // 返回结果的位数
}

int main()
{
    string a, b;  // 用于存储输入的两个大整数
    int c[505];   // 用于存储加法结果的每一位数字
    int n;         // 用于存储加法结果的位数

    cin >> a >> b;  // 输入两个大整数

    // 调用高精度加法函数,计算 a + b 的结果
    n = aplusb(a, b, c);

    // 输出结果(从高位到低位)
    for (int i = n - 1; i >= 0; i--) 
        cout << c[i];

    return 0;
}

【运行结果】

1001
9099
10100
posted @ 2026-02-17 08:21  团爸讲算法  阅读(2)  评论(0)    收藏  举报