题目:1168:大整数加法
地址 :http://ybt.ssoier.cn:8088/problem_show.php?pid=1168
类型:模拟、高精度
题解:
#include <bits/stdc++.h>
using namespace std;
int base, t;
vector<int> a, b, c, d;
vector<int> turn(string s) {
vector<int> a;
reverse(s.begin(), s.end());
for (int i = 0; i < s.size(); i++)
if (s[i] >= 'A' && s[i] <= 'Z')
a.push_back(s[i] - 'A' + 10);
else
a.push_back(s[i] - '0');
return a;
}
vector<int> add(vector<int> x, vector<int> y) {
vector<int> c;
// 累加
for (int i = 0; i < x.size() || i < y.size(); i++) {
c.push_back(0);
if (i < x.size() && i < y.size())
c[i] = x[i] + y[i];
if (i >= x.size())
c[i] = y[i];
if (i >= y.size())
c[i] = x[i];
}
// 进位
c.push_back(0);
for (int i = 0; i < c.size() - 1; i++) {
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
// 退0
for (int i = c.size() - 1; i > 0; i--) {
if (c[i] != 0)
break;
c.pop_back();
}
return c;
}
int main() {
string x, y;
cin >> x >> y;
a = turn(x);
b = turn(y);
c = add(a, b);
for (int i = c.size() - 1; i >= 0; i--) {
cout << c[i];
}
return 0;
}