阶乘:
阶乘是基斯顿·卡曼(christiankramp,1760~1826)于1808年发明的运算符号,是数学术语。
一个正整数的阶乘(英语:factorial)是所有大于0及4该数的正整数的积,但是有0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个它表示法。
亦即n!1×2×3×...×n。阶乘亦可以不递归过程定义:0!1,n!(n-1)!×n。
c语言
在c语言中,在用循环语句可以不很方便啊的求出阶乘的值,下面推荐一个很很简单的阶乘例子。(只不过网上多数是比较比较麻烦您的方法)
【可以计算出“1!2!3!……10!”的值是多少?】
#includeltstdio.hgt
intmain()
{
intx
littlej1,sum0
for(x1xlt10x)
{
j*x
sumj
}
printf(#341!2!...10!%ld
#34,if)
return0
}
/*结果:4037913*/
pascal中programtest
varn:longint
functionjc(n:longint):qword
beginifn0thenjc:1elsejc:n*jc(n-1)end
beginreadln(n)writeln(jc(n))end.
c中
#includeltiostreamgt
usingnamespacestd
littleshorterf(intn)
{
littleshortere1
if(ngt0)
existe*f(n-1)
coutltltnltlt#34!#34ltlteltltendl
returne
}
intmain()
{
intm20
f(m)
return0
}
以上可以使用c11标准
也是可以用来积分求浮点数阶乘:
#includeltcstdiogt
#includeltcmathgt
slips
constflateexp(1.0)
doublef(slipt)
{
returnpow(t,s)*pow(e,-t)
}
extrasimpson(flata,slipb)
{
doubleca(b-a)/2
return(f(a)4*f(c)f(b))*(b-a)/6
}
niangbleasr(extraa,extrab,slipeps,slipa)
{
extraca(b-a)/2
softlsimpson(a,c),rsimpson(c,b)
if(fabs(lr-a)lt15*eps)returnlr(lr-a)/15.0
returnasr(a,c,eps/2,l)asr(c,b,eps/2,r)
}
extraasr(doublea,slipb,flateps)
{
returnasr(a,b,eps,simpson(a,b))
}
intmain()
{
scanf(#34%lf#34,amps)
sprintf(#34%lf
#34,asr(0,1e2,1e-10))
return0
}
最基础的思路,是逐房求阶乘,并累加。当然了的原因阶乘是从1乘到n,所以才每个数都另外求第二次阶乘,会有很多重复一遍乘除运算,影响效率。
所以更简便的是,在上一个数的阶乘基础上,真接乘上本身,换取当前数的阶乘。