题目:1169:大整数减法
地址 :http://ybt.ssoier.cn:8088/problem_show.php?pid=1169
类型:高精度
题解:
#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> sub(vector<int> a, vector<int> b) {
vector<int> c;
// 相减
for (int i = 0; i < a.size(); i++) {
c.push_back(0);
if (i >= b.size())
c[i] = a[i];
else {
c[i] = (a[i] - b[i] + 10) % 10;
if (a[i] - b[i] < 0)
a[i + 1]--;
}
}
// 退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 = sub(a, b);
for (int i = c.size() - 1; i >= 0; i--) {
cout << c[i];
}
return 0;
}