大数除法
简单举例
以7546除23为例。
先减去23的100倍,就是2300,可以减3次,余下646。 此时商就是300;
然后646减去23的10倍,就是230,可以减2次,余下186。此时商就是320;
然后186减去23,可以减8次,此时商就是328.
原因说明
对于大数除法来说其本质上也是大数减法的一种延续,我们除以一个数字可以采用多次减去该数,而能减去的次数便是我们所需要的商,但是一个很大的数反复减去一个比它小的数字,这样计算的效率太低了。
于是我们采用减去除数的$10^n$来进行计算,通过这样的多次减法运算,将每次减的次数乘以$10^n$便是此次过程中的商,当我们减完之后会得到多个商(每次减的次数乘以$10^n$后的结果),我们将其加起来便可以得到我们需要的商。
1 |
|
拿上面的代码再举一个例子
50/3
我们最先将余数初始为0
,之后进入到对应的循环for
中,第一次beichu
等于5
(之前的输入函数已经将输入的数据反序了),那么能够减去的次数为1
,之后余数为2
,此时c.s[]
的最后一位存储的便是1
,我们第二次进入到循环中去,此时的beichu
便变为了20
(2*10+0),再经过一次除可以得到是6
,此时c.s[]
的倒数第二位存储的便是6
,之后我们将c.s[]
的长度,假设为len
进行获取,第一位(下标为0)乘以$10^{len}$次方,之后每次将其len
减一,后面一项乘以相应的10的次方便可以啦,最后将每次乘出来的结果进行相加便可以了。
大数除法
https://equinox-shame.github.io/2022/07/01/大数除法/