/*
分三种情况:
1.减数长度大于被减数
交换减数与被减数,输出负号,方便减
2.减数长度等于被减数(分三种情况)
a.减数大于被减数,类似1情况1
b.减数等于被减数,两数相等,直接输出0,完成。
c.减数小于被减数
3.减数长度小于被减数
*/
#include<stdio.h>
#include<string.h>
int main() {
char ch1[1000], ch2[1000];
int num1[1000], num2[1000], num[1000];
int i, j, flag1 = 1, max, flag2 = 0;
scanf("%s", ch1);
scanf("%s", ch2);
max = strlen(ch1);
if (strlen(ch1)<strlen(ch2)) {//减数长度大于被减数,必定为负数
flag1 = -1;
max = strlen(ch2);
printf("-");
}
if (strlen(ch1) == strlen(ch2))
flag1 = 0;//确定输入数字的长度比较结果。便于采用合理的运算方式
for (i = 0; i<max; i++) {//初始化
num[i] = 0;
num1[i] = 0;
num2[i] = 0;
}
for (i = strlen(ch1) - 1, j = 0; i >= 0; i--)
num1[j++] = ch1[i] - '0';//将字符数组元素所对应数字存入整形数组
for (i = strlen(ch2) - 1, j = 0; i >= 0; i--)
num2[j++] = ch2[i] - '0';
//分情况对数字进行减法运算
if (flag1 == 1) {//第三种情况
for (i = 0; i<strlen(ch1); i++) {
num[i] = num1[i] - num2[i];
if (num[i]<0) {
num[i] += 10;
num1[i + 1]--;
}
}
}
else if (flag1 == 0) {//第二种情况
for (i = strlen(ch1) - 1; i <= 0; i--) {//循环结束的情况有两种 1.ch1[i]!=ch2[i] 2.遍历完数组中所有元素
if (ch1[i] != ch2[i])
break;
}
if (ch1[i]>ch2[i]) {//ch1[i]>ch2[i],自然相减
for (i = 0; i<strlen(ch1); i++) {
num[i] = num1[i] - num2[i];
if (num[i]<0) {
num[i] += 10;
num1[i + 1]--;
}
}
}
else if (ch1[i] == ch2[i]) {//相等为0
printf("0");
}
else {//输出负号,交换减数被减数
printf("-");
for (i = 0; i<strlen(ch1); i++) {
num[i] = num2[i] - num1[i];
if (num[i]<0) {
num[i] += 10;
num2[i + 1]--;
}
}
}
}
else {//第一种情况
for (i = 0; i<strlen(ch2); i++) {
num[i] = num2[i] - num1[i];
if (num[i]<0) {
num[i] += 10;
num2[i + 1]--;
}
}
}
for (i = max; i >= 0; i--) {
if (num[i] <= 0 && flag2 == 0)
continue;
flag2 = 1;
printf("%d", num[i]);
}
return 0;
}