作业帮 > 数学 > 作业

怎样计算“阶乘”?即从1开始的连续自然数相乘的积,如:1*2*3*4*5*6*7*8*9*……=?

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/11/08 07:39:01
怎样计算“阶乘”?即从1开始的连续自然数相乘的积,如:1*2*3*4*5*6*7*8*9*……=?
请告诉我计算“阶乘”的公式,再一步一步地仔细给我解释,我会很感谢的!
请不要说什么“N!”因为我知道这是阶乘的表达方法,但我不知道怎样计算啊。请说清楚哦!PLEASE !!
说实话,没有计算阶乘的公式,也没有简便方法,只是硬算,也可以运用计算机,可以计算到65!,如果你想计算跟大的数,我建议你上百度寻找计算阶乘的软件,听说多大的数都能计算出来.
还有这个参考:
由于阶乘运算的增长速度特别快(比2^n的增长速度快),对于较小整数的阶乘运算采用简单的递规算法可以实现,但是对于大整数的乘法(比如1000!),则传统的递规算法就失去了作用.
由于本人的水平不高,用下列拙劣的方式实现,请高人多多指教.具体如下:定义一个很长的数组,用数组的每一项表示计算结果的每一位.例如,7!=5040,a[1000],则a[0]=0,a[1]=4,a[2]=0,a[3]=5.
程序源代码:
/**
*计算大数的阶乘,算法的主要思想就是将计算结果的每一位用数组的一位来表示:如要计算5!,那么首先将
*(1) a[0]=1,然后a[0]=a[0]*2,a[0]=2,
*(2) a[0]=a[0]*3,a[0]=6
*(3) a[0]=a[0]*4,a[0]=24,此时a[1]=2,a[0]=4
*/
public class Factorial
{
static int a[] = new int [10000];
static void factorial(int n)
{
for(int i=2; i< a.length; i++)
a[i] = 0; //将数组元素初始化
a[0] = 1; //用数组的一项存放计算结果的位数
a[1] = 1; //将第一项赋值为一
for(int j= 2; j