······快乐 de 高精度 de 加减 计算······

今天让我们进入算术天地,高精度の快乐计算!!

首先第一步,

高精度的读入!!

我们可以用一个数组来保存整个高精度整数,并记录高精度整数的长度len。为了便于之后的计算,我们都会在读入时把这个整数倒置,也就是说a0保存个位数字,a1保存十位数字······

代码的话,Look like this:

string num;
cin >>num;
int a[105];
int len = num.size();
for(int i = 0;i<len;i++){
    a[i] = num[len-1-i]-'0';//注意这里要减去‘0’,因为我们要把字符‘0’变为整数‘0’
}

再说,就是另一个难点,高精度的计算(加减乘除):

First,

加法运算

一次计算,难免会碰上进位的时候,所以最最关键和基础的一步就是进位儿!

中间的推导过程,就不讲了,但是!!

划重点\(^o^)/~!!

计算过程的理论解释:

1.将要加的数加到高精度数组下标为0的位置上,当前指向这一位。

2.让下一位数加上当前位上的数除以10的商,当前位上的数对10取模。

3.向后移动一位,继续执行第二步操作。

这样的关键代码如下哦:

int a[105],x,len;
//将高精度读入到a,倒叙放置
//高精度的位数记为len
//将单精度读入到x
a[0] += x;
for(int i = 0;i < len;i++){
    a[i+1] += a[i]/10;
    a[i]%=10;
}

另外,对每一位进行完进位操作后,还需判断a[len]是否大于0,如果大于了0,就需要考虑进位操作并将长度加1!关键代码如下:

while(a[len]){
    a[len+1] += a[len] / 10;
    a[len] %= 10;
    len++;
}

Second,

减法运算

划重点!!

高精度减法的过程和高精度加法的过程是非常相似的。我们来看一下计算过程:

1.在高精度数组下标为0的位置减去单精度整数,当前指向这一位。

2.如果当前位上的数小于0,就上当前指向的下一位减去1,并让当前位置加上10,直到当前位置不小于0

3.向前移动一位,继续执行第二步操作

除了上述过程和加法有所差异以外,最后的长度处理也与加法有所不同。进行加减操作以后,高精度整数的总长度有可能变小,所以需要判断是否当前高精度数的最高位是0,核心代码如下:

a[0]-=x;
for(int i = 0; i < len ; i++){
    while(a[i] < 0)
        a[i+1]--;
        a[i] += 10;
}
while(len > 1 && a[len-1] == 0){
    len--;
}

故,今天的加减法小课堂就结束啦!!

喜欢我的课程的,希望点赞o( ̄▽ ̄)d和关注哦!!

(*^▽^*)(*╹▽╹*)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值