标题：阶乘
计算方法
正整数阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。  例如所要求的数是4，则阶乘式是1×2×3×4，得到的积是24，24就是4的阶乘。 例如所要求的数是6，则阶乘式是1×2×3×……×6，得到的积是720，720就是6的阶乘。例如所要求的数是n，则阶乘式是1×2×3×……×n，设得到的积是x，x就是n的阶乘。
表示方法
  任何大于1的自然数n阶乘表示方法：
n!=1×2×3×……×n
或
n!=n×(n-1)!
n的双阶乘：
当n为奇数时表示不大于n的所有奇数的乘积
如：7!!=1×3×5×7
当n为偶数时表示不大于n的所有偶数的乘积(除0外）
如：8!!=2×4×6×8
小于0的整数-n的阶乘表示：
（-n）！= 1 / (n+1)!
20以内
以下列出0至20的阶乘：
0！=1，注意(0的阶乘是存在的)
1！=1，
2！=2，
3！=6，
4！=24，
5！=120，
6！=720，
7！=5,040，
8！=40,320
9！=362,880
10！=3,628,800
11！=39,916,800
12！=479,001,600
13！=6,227,020,800
14！=87,178,291,200
15！=1,307,674,368,000
16！=20,922,789,888,000
17！=355,687,428,096,000
18！=6,402,373,705,728,000
19！=121,645,100,408,832,000
20！=2,432,902,008,176,640,000
另外，数学家定义，0！=1，所以0！=1！
定义范围
通常我们所说的阶乘是定义在自然数范围里的（大多科学计算器只能计算0~69的阶乘），小数科学计算器没有阶乘功能，如0.5！，0.65！，0.777！都是错误的。但是，有时候我们会将Gamma函数定义为非整数的阶乘，因为当x是正整数n的时候，Gamma函数的值是n-1的阶乘。
¤伽玛函数（Gamma Function）
Γ（x)=∫e^(-t)*t^(x-1)dt (积分下限是零，上限是+∞）(x≠0,-1,-2,-3,……)
运用积分的知识，我们可以证明Γ（x)=(x-1) * Γ（x-1)
所以，当x是整数n时，Γ（n) = (n-1)(n-2)……=(n-1)!
这样Gamma 函数实际上就是阶乘的延拓。
¤欧拉等式
x!=∫-(ln(x))^ndx (积分下限是零上限是+1）(x>0)
¤[计算机科学]
用Ruby求365的阶乘。
def AskFactorial(num) factorial=1;
step(num,1){|i| factorial*=i}
return factorial end factorial=AskFactorial(365)  斯特林公式与其近似公式puts factorial
¤【阶乘有关公式】
n!≈﹛sqrt(2*pi*n)﹜(n/e)^n
此为斯特林公式的简化公式（见右图）。
该公式常用来计算与阶乘有关的各种极限。
计算机
C语言中的阶乘在C语言中，使用循环语句可以很方便的求出阶乘的值，下面介绍一个很简单的阶乘例子。（因为网上多数是比较麻烦的方法）
¤【计算出“ 1！+ 2！+ 3！+ …… + 10！”的值是多少？】
#include <stdio.h>
main()
{
long x, j, sum;
j=1, sum = 0;
for（x=1; x <= 10; x++)
{j*=x,sum += j;
}
printf("1!+2!+...+10!=%ld\n", sum);
getch();
}
/*结果：4037913*/Pascal中的阶乘program test;
var
n:longint;
function jc(n:longint):qword;
begin
if n=0 then jc:=1
else jc:=n*jc(n-1)
end;
begin
readln (n);
writeln (jc(n))
end.
c++语言中的阶乘#include <iostream>
using namespace std;
int f(int n)
{
cout << "函数开始: n = " << n << endl;
int m;
if ( n == 1)
{
m = 1;
}
else
{
m = f(n - 1) * n;
}
cout << "函数结束：n = " << n << ", 返回值 = " << m << endl;
return m;
}
int main()
{
cout << "10! = " << f(10) <<endl;
return 0;
}
以上为C++: 10！JAVA语言中的阶乘public class fac {
final static int MAX=20;//可以替换MAX的值。
public static void main(String[] args){
int i = 1;long result=1;long[] n = new long[MAX];
do {
result *= i;
out.println(i+"! = "+result);
n[i] = result;
i++;
}//除了do-while还可以使用while和for句式
while (i<MAX) ;
n[0] = 1;//阶乘end
}
}
python 里面的阶乘
v = 10
i=1
for j in range(1,v):
i*=j
print( i *(j+1))高精度算法求阶乘1
#include <stdio.h>
#define N 5000 // modify it to hold larger number
int main(void)
{
int n, i, j, s, up, f[N] = {0};
scanf("%d", &n);
for (i = 2, f[0] = 1; i <= n; i++)
for (j = up = 0; j < N; j++) {
s = f[j] * i + up;
f[j] = s % 10;
up = s / 10;
}
for (i = N-1; f[i] == 0; i--) ;
for (; i >= 0; i--) printf("%d", f[i]) ;
printf("\n");
return 0;
}2var
i,j,n,w : longint;
a : array[1..1000] of integer;
procedure fact(k : longint);　　
var
x,i : longint;
begin
x := 0;
for i := 1 to w do
begin
a[i] := a[i]*k+x;
x := a[i] div 10;
a[i] := a[i] mod 10;
end;
while x>0 DO
begin
w := w+1;
a[w] := x mod 10;
x := x div 10;
end;
end;
begin　　
assign(input,'ni.in'); reset(input);
assign(output,'ni.out'); rewrite(output);
a[1] := 1;
w := 1;
readln(n);
for i := 1 to n do fact(i);
for j := w downto 1 do write(a[j]);
writeln;
close(input); close(output);
end.