#include<stdio.h>
#include<string.h>
int reduce(char *A ,char * B)
{
int len1,len2,i,j,max,a,x;
int C[1000]={0},D[1000]={0};
len1 = strlen(A);
len2 = strlen(B);
if(len1>len2)
{max = len1;a=1;}//a存储符号 正负或者0 max存储最大长度
else if(len1 == len2)
{
max = len1;
if(strcmp(A,B)>0) a = 1;
else if(strcmp(A,B)<0) a = -1;
else a = 0;
}
else {max = len2;a=-1;}
if(a==1)//分别用C存储大数 D存储小数 注意是倒序
{
for(i=len1-1,j=0;i>=0;i--)
C[j++] = A[i]-'0';
for(i=len2-1,j=0;i>=0;i--)
D[j++] = B[i]-'0';
}
if(a==-1)//负的话 前后相反 倒序
{
for(i=len1-1,j=0;i>=0;i--)
D[j++] = A[i]-'0';
for(i=len2-1,j=0;i>=0;i--)
C[j++] = B[i]-'0';
}
for(i=0;i<max;i++)//计算减法,不够减的话,下一位借1
{
C[i] =C[i]-D[i];
if(C[i]<0)
{
C[i] += 10;
C[i+1]--;
}
}
for(i=max;i>=0;i--)
if(C[i]!=0)
{x = i;
break;}//从后往前找,找到一个不为0的最大数位 比如10001-10000 可能为00001 但是0不输出
if(a==0)
{printf("0");//0的话,直接输入
return 0;}
if(a==-1)
printf("-");//前比后小输出一个负号
for(i=x;i>=0;i--)//从非零位倒序输出
printf("%d",C[i]);
}
int main()
{
char A[1000],B[1000];
scanf("%s %s",A,B);
reduce(A,B);//调用函数
}
03-18
305
11-08
924