代码演示
#include <stdio.h>
#include <string.h>
char s1[1005], s2[1005];
int n1[1005], n2[1005], ans[1006];
int flag;
int strcmp_(char *a1, char *a2) {
int a1_len = strlen(a1), a2_len = strlen(a2);
if (a1_len == a2_len) {
for (int i = 0; a1[i]; i++) {
if (a1[i] > a2[i]) return 1;
else if (a1[i] < a2[i]) return 0;
}
return -1;
} else if (a1_len > a2_len) return 1;
return 0;
}
void big_sub(int *a1, int *a2) {
for (int i = 1; i <= ans[0]; i++) {
ans[i] = a1[i] - a2[i];
}
for (int i = 1; i <= ans[0]; i++) {
if (ans[i] < 0) {
--ans[i + 1];
ans[i] += 10;
}
}
while (ans[ans[0]] == 0) ans[0]--;
return ;
}
int main() {
scanf("%s", s1);
scanf("%s", s2);
n1[0] = strlen(s1);
n2[0] = strlen(s2);
flag = strcmp_(s1, s2);
if (flag == -1) {
printf("0\n");
return 0;
}
for (int i = 0, j = n1[0]; j && s1[i]; j--, i++) {
n1[j] = s1[i] - '0';
}
for (int i = 0, j = n2[0]; j && s2[i]; j--, i++) {
n2[j] = s2[i] - '0';
}
if (flag) {
ans[0] = n1[0];
big_sub(n1, n2);
} else {
ans[0] = n2[0], big_sub(n2, n1);
printf("-");
}
for (int i = ans[0]; i; i--) {
printf("%d", ans[i]);
}
return 0;
}