#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<int> sub(vector<int>v1, vector<int>v2) {
vector<int> res;
for (int i = 0, t = 0; i < v1.size(); i++) {
t = v1[i] - t;//减数先减去借位
if (i < v2.size()) t -= v2[i];//小的那个数如果有就将其减去
res.push_back((t + 10) % 10);
if (t < 0) t = 1;
else t = 0;
}
//高位数字可能有多个0,同时又不能将最后一个0去掉
while (res.size() > 1 && res.back() == 0)res.pop_back();
return res;
}
bool cmp(vector<int>v1, vector<int>v2) {
if (v1.size() != v2.size()) return v1.size() > v2.size();
for (int i = v1.size() - 1; i >= 0; i--) {
if (v1[i] != v2[i]) return v1[i] > v2[i];
}
return true;
}
int main()
{
string s1, s2;
vector<int> v1, v2;
cin >> s1 >> s2;
for (int i = s1.size() - 1; i >= 0; i--)v1.push_back(s1[i] - '0');
for (int i = s2.size() - 1; i >= 0; i--)v2.push_back(s2[i] - '0');
if (cmp(v1, v2)) {
auto res = sub(v1, v2);
for (int i = res.size() - 1; i >= 0; i--)printf("%d", res[i]);
}
else {
cout << '-';
auto res = sub(v2, v1);
for (int i = res.size() - 1; i >= 0; i--)printf("%d", res[i]);
}
return 0;
}
acwing792.高精度减法
最新推荐文章于 2024-07-24 22:13:06 发布