铸铝门和铜门的优缺点:怎样计算“阶乘”

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 09:34:39
我很想知道“阶乘”是怎么计算的,即从1开始的连续自然数相乘的积,如:1*2*3*4*5*6*……=?
告诉我“阶乘”的公式,再一步一步地仔细给我解释,我会很感谢的!!
请不要说什么“N!”因为我知道这是阶乘的表达方法,但我不知道怎样计算啊。请说清楚哦!PLEASE !!

真党的没有计算阶乘的公式的,也没有简便方法,只是硬算,也可以运用计算机,可以计算到65!,如果你想计算跟大的数,我建议你上百度寻找计算阶乘的软件,听说多大的数都能计算出来。 嘿!那个Q币的,怎么了?? ^_^

还有这个参考:

由于阶乘运算的增长速度特别快(比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 <= n; j++)
{
int i=1;
int c = 0; //c表示向高位的进位
for(; i <= a[0]; i++)
{
a[i] = a[i] * j + c;//将来自低位的计算结果和本位的结果相加
c = a[i] / 10;
a[i] = a[i] % 10;
}
for(; c != 0; i++)
{
a[i] = c%10;
c = c / 10;
}
a[0] = i - 1;
}
}
public static void main(String[] args)
{
String num = args[0];

int count = 0;
int n = Integer.parseInt(num);
f(n);
for(int i= a[0]; i>0; i--)
{

count++;
System.out.print(/*"a[" + i + "]=" + */a[i]/* + " "*/);
}
System.out.println("\n"+count);
}
}

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=528778

参考资料:http://blog.csdn.net/hengshan/archive/2005/11/13/528778.aspx

阶乘没有特别的公式可以求,只能按定义公式计算。

一般做题的时候,考试的时候,我们都用统一的计算器,上面有阶乘的键,自动出答案的。但不适用于大数的计算。但也有简便计算的方法,就是如果出现n!/(n-2)!就可以根据定义公式很快得到答案为n*(n-1)。还有很多题也一样,需要从定义出发去推导,不一定要计算出n!就可以化简解题的。

而一般大数阶乘计算都是通过计算机编程计算的。这个程序是最基本、简单的程序之一。

N的阶乘公式:
N!=1*2*3*....(N-2)*(N-1)*N
且规定0!=1
例如
8!=1*2*3*4*5*6*7*8

阶乘只能死算,不像前N个自然数的加法有高斯公式

但是当N趋向于无穷大时有近似公式
ln(N!)=N×lnN -N

用QB来算哈

a=1
for b=1 to 6
a=a*b
next b
print a
end

你乘到几,那个6就变成几哈