题解:洛谷 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
浙公网安备 33010602011771号