对A==B的情况特判
保证A > B,否则进行调换
a,b,c数组均要初始化为0。
#include <iostream>
#include <string>
#include <cmath>
#include <map>
#include <cstring>
#include <algorithm>
using namespace std;
bool IsNegative(string &A, string &B)
{
if (A.size() > B.size()) {
return false;
}
else if (A.size() < B.size()) {
return true;
}
else {
return A > B ? false : true;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
string A, B;
cin >> A >> B;
if (A == B) {
cout << 0 << endl;
return 0;
}
bool nega_flag = IsNegative(A, B);
if (nega_flag) {
A.swap(B);
}
int len_A = A.size(), len_B = B.size(), len = max(len_A, len_B);
int a[len], b[len], c[len];
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
for (int i = len_A - 1; i >= 0; i--) {
a[len_A - 1 - i] = A[i] - '0';
}
for (int i = len_B - 1; i >= 0; i--) {
b[len_B - 1 - i] = B[i] - '0';
}
for (int i = 0; i < len - 1; i++) {
c[i + 1]--;
c[i] += a[i] + 10 - b[i];
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
c[len - 1] += a[len - 1] - b[len - 1];
for (int i = len - 1; c[i] == 0; i--) {
len--;
}
if (nega_flag) {
cout << '-';
}
for (int i = len - 1; i >= 0; i--) {
cout << c[i];
}
cout << endl;
return 0;
}