高精度减法与加法思路大致相同
#include<stdio.h>
#include<string.h>
int main()
{
char str1[20000],str2[20000],ch[20000];
int a[20000]= {0},b[20000]= {0},len,len1,len2,i;
while(scanf("%s",str1)!=EOF)
{
scanf("%s",str2);
len1=strlen(str1);
len2=strlen(str2);
if((strcmp(str2,str1)>0&&len1<=len2)||len1<len2)//如果减数大于被减数,交换位置并输出负号
{
strcpy(ch,str2);
strcpy(str2,str1);
strcpy(str1,ch);
printf("-");
}
else if(strcmp(str2,str1)==0)//相等输出0
{
printf("0\n");
continue;
}
len1=strlen(str1);
len2=strlen(str2);
for(i=0; i<len1; i++)
a[i]=str1[len1-1-i]-'0';
for(i=0; i<len2; i++)
b[i]=str2[len2-1-i]-'0';
len=(len1>len2)?len1:len2;
for(i=0; i<len; i++)
{
if(a[i]>=b[i])
a[i]=a[i]-b[i];
else if(a[i]<b[i])//借位
{
a[i+1]=a[i+1]-1;
a[i]=a[i]+10-b[i];
}
}
if(!a[i-1])//防止10-1=09
len--;
for(i=0; i<len; i++)
printf("%d\n",a[len-1-i]);
}
return 0;
}