#include <stdio.h> #include <string.h> # include<malloc.h> int dividor(char* a, int b, char* c) //返回余数,商保存在c[] { int i, j, temp = 0, n; char* s; n = strlen(a); s = (char*)malloc(sizeof(char)*(n + 1)); for (i = 0; a[i] != 0; i++) { temp = temp * 10 + a[i] - '0'; s[i] = temp / b + '0'; temp %= b; } s[i] = '\0'; for (i = 0; s[i] == '0'&&s[i] != '\0'; i++); if (s[i] == '\0') { c[0] = '0'; c[1] = '\0'; } else { for (j = 0; s[i] != '\0'; i++, j++) c[j] = s[i]; c[j] = '\0'; } free(s); return temp; } void mul(char *a, char *b, char *c) //大数乘法,结果保存在c[] { int temp[2500]; int i, j, l; int la = strlen(a); int lb = strlen(b); for (i = 0; i < la + lb; i++) temp[i] = 0; for (i = la - 1; i >= 0; i--) { l = la - 1 - i; for (j = lb - 1; j >= 0; j--) { temp[l] = (b[j] - '0')*(a[i] - '0') + temp[l]; l++; } } while (temp[l] == 0) l--; for (i = 0; i <= l; i++) { temp[i + 1] += temp[i] / 10; temp[i] = temp[i] % 10; } if (temp[l + 1] != 0) l++; while (temp[l] / 10 != 0) { temp[l + 1] += temp[l] / 10; temp[l] = temp[l] % 10; l++; } if (temp[l] == 0) l--; i = 0; while (l >= 0) { c[i] = temp[l] + '0'; i++; l--; } c[i] = '\0'; } void add(char* a, char* b, char* c)//大数加法,结果保存在c[] { int i, j, k, max, min, n, temp; char *s, *pmax, *pmin; max = strlen(a); min = strlen(b); if (max < min) { temp = max; max = min; min = temp; pmax = b; pmin = a; } else { pmax = a; pmin = b; } s = (char*)malloc(sizeof(char)*(max + 1)); s[0] = '0'; for (i = min - 1, j = max - 1, k = max; i >= 0; i--, j--, k--) s[k] = pmin[i] - '0' + pmax[j]; for (; j >= 0; j--, k--) s[k] = pmax[j]; for (i = max; i >= 0; i--) if (s[i] > '9') { s[i] -= 10; s[i - 1]++; } if (s[0] == '0') { for (i = 0; i <= max; i++) c[i - 1] = s[i]; c[i - 1] = '\0'; } else { for (i = 0; i <= max; i++) c[i] = s[i]; c[i] = '\0'; } free(s); } void subtract(char* a, char* b, char* c) //大数减法,结果保存在c[] { int i, j, ca, cb; ca = strlen(a); cb = strlen(b); if (ca > cb || (ca == cb&&strcmp(a, b) >= 0)) { for (i = ca - 1, j = cb - 1; j >= 0; i--, j--) a[i] -= (b[j] - '0'); for (i = ca - 1; i >= 0; i--) if (a[i] < '0') { a[i] += 10; a[i - 1]--; } i = 0; while (a[i] == '0') i++; if (a[i] == '\0') { c[0] = '0'; c[1] = '\0'; } else { for (j = 0; a[i] != '\0'; i++, j++) c[j] = a[i]; c[j] = '\0'; } } else { for (i = ca - 1, j = cb - 1; i >= 0; i--, j--) b[j] -= (a[i] - '0'); for (j = cb - 1; j >= 0; j--) if (b[j] < '0') { b[j] += 10; b[j - 1]--; } j = 0; while (b[j] == '0') j++; i = 1; c[0] = '-'; for (; b[j] != '\0'; i++, j++) c[i] = b[j]; c[i] = '\0'; } } int main() { char a[100], b[100], c[100]; while (scanf("%s%s", a, b) != EOF) { subtract(a, b, c); puts(c); } return 0; }