Cho 2 chuỗi số lớn (vượt quá long long). Tính tổng trả về chuỗi.
Ví dụ
"235235823852" + "45230820348" = "280466644200"
Thuật toán
- Đảo ngược hoặc duyệt từ cuối.
- Cộng từng cặp chữ số + carry.
- Đẩy kết quả vào string, cuối cùng reverse.
Code C++
#include <bits/stdc++.h>
using namespace std;
string addBig(string a, string b) {
if (a.size() > b.size()) swap(a, b);
int n = a.size(), m = b.size(), diff = m - n;
string res;
int carry = 0;
for (int i = n-1; i >= 0; i--) {
int sum = (a[i]-'0') + (b[i+diff]-'0') + carry;
res.push_back('0' + sum%10);
carry = sum/10;
}
for (int i = diff-1; i >= 0; i--) {
int sum = (b[i]-'0') + carry;
res.push_back('0' + sum%10);
carry = sum/10;
}
if (carry) res.push_back('0' + carry);
reverse(res.begin(), res.end());
return res;
}
int main() {
cout << addBig("235235823852", "45230820348") << endl; // 280466644200
return 0;
}
Kết quả
280466644200
Độ phức tạp: O(max(len1, len2)).