本题与高精度加法类似,主要是考察coding能力,具体看代码即可
#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool cmp(vector<int> &num1, vector<int> &num2) {
if(num2.size() > num1.size()) return true;
if(num2.size() == num1.size()) {
for(int i = num1.size() - 1; i >= 0; --i) {
if(num1[i] > num2[i]) return false;
else if(num2[i] > num1[i]) return true;
}
}
return false;
}
void sub(vector<int> &num1, vector<int> &num2) {
vector<int> res;
for(int i = 0, t = 0; i < num1.size(); ++i) {
t = num1[i] - t;
if(i < num2.size()) t = t - num2[i];
res.push_back((t + 10) % 10);
if(t < 0) t = 1;
else t = 0;
}
while(res.size() > 1 && res.back() == 0) res.pop_back();
for(int i = res.size() - 1; i >= 0; --i) printf("%d", res[i]);
printf("\n");
}
int main() {
string str1, str2;
cin >> str1 >> str2;
vector<int> num1, num2;
for(int i = str1.size() - 1; i >= 0; --i) num1.push_back(str1[i] - '0');
for(int i = str2.size() - 1; i >= 0; --i) num2.push_back(str2[i] - '0');
if(cmp(num1, num2)) {
cout << "-";
sub(num2, num1);
} else
sub(num1, num2);
return 0;
}