题目地址:
https://www.acwing.com/problem/content/793/
给两个正整数,计算它们的和。
输入格式:
共两行,每行包含一个整数。
输出格式:
共一行,包含所求的和。
数据范围:
1
≤
l
≤
100000
1\le l\le 100000
1≤l≤100000
l
l
l是两个数的位数
高精度加法。代码如下:
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
string add(auto& a, auto& b) {
string s;
s.reserve(max(a.size(), b.size()) + 1);
for (int i = a.size() - 1, j = b.size() - 1, t = 0; i >= 0 || j >= 0 || t;) {
int sum = t;
if (i >= 0) sum += a[i--] - '0';
if (j >= 0) sum += b[j--] - '0';
s.push_back(sum % 10 + '0');
t = sum / 10;
}
reverse(s.begin(), s.end());
return s;
}
int main() {
string a, b;
getline(cin, a);
getline(cin, b);
cout << add(a, b) << endl;
}
时空复杂度 O ( l ) O(l) O(l)。