高精度减法的基本思路和加法差不多,仍然是字符串输入,数组计算输出,只不过由进位变成借位,利用一下补码的思想就可以轻松求得结果。
代码如下:
#include<stdio.h>
#include<string.h>
#define MAX 1000//数组字符串最大长度
int main(void)
{
int arr1[MAX]={0},arr2[MAX]={0},len,len1,len2,i,j;
char str[MAX];
scanf("%s",str);
len1=strlen(str);
for(i=0;i<len1;i++)
arr1[i]=str[len1-1-i]-'0';
scanf("%s",str);
len2=strlen(str);
for(i=0;i<len2;i++)
arr2[i]=str[len2-1-i]-'0';
len=(len1>len2)?len1:len2;
for(i=0;i<len;i++)
{
arr1[i+1]-=1;//先借位
arr1[i+1]+=(arr1[i]-arr2[i]+10)/10;//再判断是否需要借位,还原或者确认借位
arr1[i]=(arr1[i]-arr2[i]+10)%10;//计算当前位
}
if(arr1[len]<0)//数组1<数组2
{
printf("-");//添加负号
for(i=0;i<len;i++)
printf("%d",(10-arr1[len-1-i])%10);//补码换算
}
else
{
for(i=0;i<len;i++)
printf("%d",arr1[len-1-i]);//正数的补码即为它的原码
}
return 0;
}
同样的,这只是整型,浮点数以后再更新