压9位
#include <iostream>
#include <string>
#include <vector>
using namespace std;
const int base = 1e9;
vector<int> add(vector<int> &A, vector<int> &B)
{
vector<int> res;
if (A.size() < B.size()) return add(B, A);
int c = 0;
for (int i = 0; i < A.size(); ++i) {
c += A[i];
if (i < B.size()) c += B[i];
res.push_back(c % base);
c /= base;
}
return res;
}
int main()
{
string a, b;
cin >> a >> b;
vector<int> A, B;
for (int i = a.size() - 1, t = 0, j = 0, bs = 1; i >= 0; --i) {
++j;
t += (a[i] - '0') * bs;
bs *= 10;
if (j == 9 || i == 0) {
A.push_back(t);
t = j = 0;
bs = 1;
}
}
for (int i = b.size() - 1, t = 0, j = 0, bs = 1; i >= 0; --i) {
++j;
t += (b[i] - '0') * bs;
bs *= 10;
if (j == 9 || i == 0) {
B.push_back(t);
t = j = 0;
bs = 1;
}
}
auto sum = add(A, B);
cout << sum[sum.size() - 1];
for (int i = sum.size() - 2; i >= 0; --i) printf("%09d", sum[i]);
cout << endl;
return 0;
}
不压位
数组实现
#include <iostream>
#include <vector>
using namespace std;
vector<int> add(vector<int> &A, vector<int> &B)
{
int c = 0;
if (A.size() < B.size()) return add(B, A);
vector<int> sum;
for (int i = 0; i < A.size(); ++i) {
int t = A[i];
if (i < B.size()) t += B[i];
t += c;
sum.push_back(t % 10);
c = t / 10;
}
if (c) sum.push_back(1);
return sum;
}
int main()
{
string a, b;
cin >> a >> b;
vector<int> A, B;
for (int i = a.length() - 1; i >= 0; --i) A.push_back(a[i] - '0');
for (int i = b.length() - 1; i >= 0; --i) B.push_back(b[i] - '0');
auto sum = add(A, B);
for (int i = sum.size() - 1; i >= 0; --i) cout << sum[i];
cout << endl;
return 0;
}
字符串实现
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string &a, string &b)
{
string sum;
int u = 0;
int i = a.length() - 1, j = b.length() - 1;
while (i >= 0 && j >= 0) {
int t = (a[i--] - '0') + (b[j--] - '0') + u;
//cout << "t is " << t << endl;
sum += t % 10 + '0';
u = t / 10;
}
while (i >= 0) {
int t = a[i--] - '0' + u;
sum += t % 10 + '0';
u = t / 10;
}
while (j >= 0) {
int t = a[j--] - '0' + u;
sum += t % 10 + '0';
u = t / 10;
}
if (u) sum += '1';
reverse(sum.begin(), sum.end());
return sum;
}
int main()
{
string a, b;
cin >> a >> b;
string c = add(a, b);
for (auto i : c) cout << i;
cout << endl;
return 0;
}