问个关于高精度n阶乘的
虽然 燕子 和孔明 的算法与代码都是很经典的,但是做为菜鸟,简单易懂的就好
首先,定义两个整型的数组:
int fac[1000];暂且先设定是1000位,我称之为“结果数组”
int add[1000];我称之为“进位数组”
现在具体说明两个数组的作用:
1.fac[1000]
比如说,一个数5的阶乘是120,那么我就用这个数组存储它:
fac[0]=0
fac[1]=2
fac[2]=1
现在明白了数组fac的作用了吧。用这样的数组我们可以放阶乘后结果是1000位的数。
2.在介绍add[1000]之前,我介绍一下算法的思想,就以6!为例:
从上面我们知道了5!是怎样存储的。
就在5!的基础上来计算6!,演示如下:
fac[0]=fac[0]*6=0
fac[1]=fac[1]*6=12
fac[2]=fac[2]*6=6
3.现在就用到了我们的:“进位数组”add[1000].
先得说明一下:add就是在第2步中用算出的结果中,第i位向第i+1位的进位数值。还是接上例:
add[0]=0;
add[1]=1; // 计算过程:就是 (fac[1]+add[0]) % 10=1
add[2]=0; /*计算过程:就是 (fac[2]+add