高精度阶乘计算
本文目的给大家介绍一下高精度的阶乘计算。
何为高精度?高精度意思不是精确到小数点多少多少位,而是指数据很大很大,超过了long long的范围,导致C/C++无法进行计算,由于long long 的范围还是比较小的,所以必须要有一种计算高精度的方法来解决这个问题。
高精度乘法的思想呢是来自于竖式运算,还记得乘法里面的竖式计算吗,比如计算789x123,你会怎么算?
我想应该是要这样子去计算吧,所以我们高精度的计算也就是这么来的。竖式计算过程如下:
我们在计算的过程中呢,本质上是利用789去乘以123的每一位,并将123的每一位换为乘出来的结果,最后再考虑进位。(记住是最后才考虑进位,而不是一边乘一边考虑进位,因为博主曾经在上面犯过错)这样子就可以得到我们想要的结果。
那么在程序中要去如何实现这个过程呢?
首先我们要明确我们计算的是高精度,用传统的int或long long都不行,这个时候我们就要用到int类型甚至long long 类型的数组,一般都是用int。将每个数字的每一位数都存放在数组里面凑成一个数组来表示我们的数,这样子就可以大数计算的效果。比如我们把123456789用长度为9的数组来存放,第一位存放1,第二位存放2,第三位存放3,以此类推,这样我们的大数就存放在了数组里面。(当然了实际运算中常采用倒序存放,即把9存放在第一位,当然这也只是一种个人习惯)
因为本文章讨论的是高精度阶乘计算,而不是高精度乘法计算,所以我们只考虑高精度乘低精度的情况。
首先我们先将一个数,无论多大,倒序存放在一个整型数组里面(当然顺序也可以,个人习惯,操作上面会有一点点差异,但是不影响结果),然后我们再依次用每个数去乘以它的每一位,等待它的每一位都被这个数乘完之后,然后再依次进位,再循环进行下一次乘法,由于我这边是采取倒序存放的&#x