欢迎光临散文网 会员登陆 & 注册

高精度减法(详细解答)

2022-05-03 11:21 作者:游侠翻滚  | 我要投稿

/*

目前信息技术邻域啊高进度运算越来越普遍,但是又非常难啊。

现在up来温习一下高进度运算,试一试蛤,顺便来帮助大家理解一下

up打字辛苦给给一个免费的赞吧,求你们了,谢谢!

话不多说,直接开始 

*/ 


#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

int main()

{

char a1[1000],b1[1000],n[1000];

int a[1000],b[1000],c[1000],la,lb,lc,i,x;

memset(a,0,sizeof(a));

memset(b,0,sizeof(b));

memset(c,0,sizeof(c));

cin>>a1>>b1;//输入2个先要做减法的数 

//如果以下两种情况出现(符合),那么a<b,所以2个数调换并输出“-”

//因为小数-大数=负数,而负数又是大数-小数的相反数。 

/*

第一种:当a1的位数小于b1的位数,那么调换并加“-”;

第二种(同时满足一下两种情况)

1.位数相同

2.a1与b1中只要同位里a1的位数小于b1的位数(从高位到低位)

   比如:4328与4331,4相同,3相同,2比3小,所以4328小于4331.

如果以上2种都符合,那么调换并加“-” 

*/ 

if(/*第一种*/strlen(a1)<strlen(b1)||/*第二种*/(strlen(a1)==strlen(b1)&&strcmp(a1,b1)<0)) 

{

strcpy(n,a1);

strcpy(a1,b1);

strcpy(b1,n);

cout<<"-";

}

//a1与b1的长度分别记录到la与lb中 

la=strlen(a1);

lb=strlen(b1);

//这个la-i的意思是倒叙记录a1,b1数组,把它记录到a,b数组里 。 

for(i=0;i<=la-1;i++) a[la-i]=a1[i]-48;

for(i=0;i<=lb-1;i++) b[lb-i]=b1[i]-48;

lc=1;i=1;x=0;//lc是答案的位数长度,i是下标,x是借位 

while(i<=la||i<=lb)

{

    if(a[i]<b[i])//如果当前位数较小,那么就需要借位了。 

    {

    a[i]+=10;//当前为数+10,(借位了) 

    a[i+1]--;//前面那个位数-1

//比如:514-331我们发现1不够减了(即十位),所以我们在5那里借位并在5那个位数(即3)-1 

    }

    c[i]=a[i]-b[i];//把当前位数运算结果保存到c[i]里 

    i++;//每循环一次i自增1; 

}

    lc=i;//最后lc即答案长度位i最后的值

//输出结果 

    while((c[lc]==0)&&(lc>1)) lc--;

    for(i=lc;i>=1;i--) cout<<c[i];

    cout<<endl;

return 0;

}


高精度减法(详细解答)的评论 (共 条)

分享到微博请遵守国家法律