题解
大整数加法
1 条题解
-
0
解题思路
有多组数据,每组两个大整数(不超过
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