#include <cstdlib>
#include <cstdio>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
void reverse(char*s) {
if (s == NULL ) return;
char *e = s + strlen(s) - 1;
while (s < e) swap(*s, *e), s++, e--;
}
char* add(char* a, char* b) {
if (a == NULL || b == NULL) return NULL;
int la = strlen(a), lb = strlen(b);
int lc = max(la, lb) + 2;
char*c = new char[lc];
c[0] = '\0';
reverse(a);
reverse(b);
int carr = 0;
int i = 0, t;
while (i < la && i < lb) {
t = a[i] - '0' + b[i] - '0' + carr;
carr = t / 10;
c[i] = (t % 10) + '0';
i++;
}
while (i < la) {
t = a[i] - '0' + carr;
carr = t / 10;
c[i++] = (t % 10) + '0';
}
while (i < lb) {
t = b[i] - '0' + carr;
carr = t / 10;
c[i++] = (t % 10) + '0';
}
if (carr != 0) c[i++] = '1';
c[i] = '\0';
reverse(a);
reverse(b);
reverse(c);
return c;
}
int cmp(char *a, char *b) {
int la = strlen(a), lb = strlen(b);
if (la != lb) return la - lb;
else {
while (*a != '\0' && *a == *b) a++, b++;
return *a - *b;
}
}
char* minus(char *a, char *b) {
if (a == NULL || b == NULL) return NULL;
if (cmp(a, b) < 0) {
char *c = minus(b, a);
reverse(c);
int l = strlen(c);
c[l] = '-';
c[l+1] = '\0';
reverse(c);
return c;
}
int la = strlen(a), lb = strlen(b);
int lc = max(la, lb) + 2;
char*c = new char[lc];
c[0] = '\0';
reverse(a);
reverse(b);
int carr = 0;
int i = 0, t;
while (i < la && i < lb) {
t = a[i] - b[i] + carr;
if (t < 0) carr = -1, t += 10;
else carr = 0;
c[i++] = t + '0';
}
while (i < la) {
t = a[i] + carr - '0';
if (t < 0) carr = -1, t += 10;
else carr = 0;
c[i++] = t + '0';
}
while (--i > 0 && c[i] == '0') ;
c[i+1] = '\0';
reverse(a);
reverse(b);
reverse(c);
return c;
}
int main() {
char a[] = "2223";
char b[] = "222999";
auto res = minus(a, b);
return 0;
}