#include <stdio.h>
#include <string.h>
void LargeNumAdd(char *str1, char *str2)
{
int num1[100] = {0};
int num2[100] = {0};
int out[100] = {0};
int len = 0, len1 = 0, len2 = 0;
int i = 0, j = 0;
len1 = strlen(str1);
len2 = strlen(str2);
//将字符数组转化为整数数组
for (i = len1-1, j = 0; i >= 0; i--)
{
num1[j++] = str1[i] - '0';
}
for (i = len2-1, j = 0; i >= 0; i--)
{
num2[j++] = str2[i] - '0';
}
i = 0;
len = len1>len2?len1:len2;
while (len+1) //多加一次循环,以防进位
{
num1[i] = num1[i] + num2[i];
if (num1[i] > 9) //进位处理
{
out[i] = num1[i] - 10;
num1[i+1]++;
}
else
{
out[i] = num1[i];
}
i++;
len--;
}
len = len1>len2?len1:len2;
if (num1[len-1] > 9) len++; //判断最高位相加是否出现进位,若进位则位数加1,
for (i = len-1; i >= 0; i--) //倒序输出正确的结果
{
printf("%d",out[i]);
}
printf("\n");
}
void LargeNumSub(char *str1, char *str2)
{
char tmp[100];
int num1[100] = {0};
int num2[100] = {0};
int out[100] = {0};
int len = 0, len1 = 0, len2 = 0;
int i = 0, j = 0;
len1 = strlen(str1);
len2 = strlen(str2);
len = len1>len2?len1:len2;
//大数相减,因为可能会出现负数的情况,所以如果被减数小于减数,
//将二者互换位置,输出时加负号,并且len1和len2也要交换
if (len1 == len2)
{
if (strcmp(str1,str2) < 0)
{
strcpy(tmp,str1);
strcpy(str1,str2);
strcpy(str2,tmp);
printf("-");
}
if (strcmp(str1,str2) == 0)
{
printf("0\n");
return;
}
}
if (len1 < len2)
{
strcpy(tmp,str1);
strcpy(str1,str2);
strcpy(str2,tmp);
printf("-");
len1 = len1 + len2;
len2 = len1 - len2;
len1 = len1 - len2;
}
//将字符数组转化为整数数组
for (i = len1-1, j = 0; i >= 0; i--)
{
num1[j++] = str1[i] - '0';
}
for (i = len2-1, j = 0; i >= 0; i--)
{
num2[j++] = str2[i] - '0';
}
i = 0;
while (len--)
{
num1[i] = num1[i] - num2[i];
if (num1[i] < 0)
{
out[i] = num1[i] + 10;
num1[i+1]--;
}
else
{
out[i] = num1[i];
}
i++;
}
len = len1>len2?len1:len2;
if (num1[len-1] == 0) len--;//如果最高位相减之后为0,则输出位数减1
for (i = len-1; i >= 0; i--)
{
printf("%d", out[i]);
}
printf("\n");
}
int main()
{
char str1[100];
char str2[100];
scanf("%s%s",str1,str2);
//LargeNumAdd(str1, str2);
LargeNumSub(str1, str2);
return 0;
}