阶乘:
阶乘是基斯顿·卡曼(ChristianKramp,1760~1826)于1808年发明的运算符号,是数学术语。一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且有0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。亦即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
C
语言在C语言中,使用循环
语句可以很方便的求出阶乘的值,下面介绍一个很简单的阶乘例子。(因为网上多数是比较麻烦的方法)【计算出“1!+2!+3!+……+10!”的值是多少?】#include<stdio.h>intmain(){intxlongj=1,sum=0for(x=1x<=10x++){j*=xsum+=j}printf("1!+2!+...+10!=%ld\n",sum)return0}
/*结果:4037913*/Pascal中programtestvarn:longintfunctionjc(n:longint):qwordbeginifn=0thenjc:=1elsejc:=n*jc(n-1)endbeginreadln(n)writeln(jc(n))end.C++中#include<iostream>usingnamespacestdlonglongf(intn){longlonge=1if(n>0)e=n*f(n-1)cout<<n<<"!="<<e<<endlreturne}intmain(){intm=20f(m)return0}
以上使用C++11标准也可以利用积分求浮点数阶乘:#include<cstdio>#include<cmath>doublesconstdoublee=exp(1.0)doubleF(doublet){returnpow(t,s)*pow(e,-t)}doublesimpson(doublea,doubleb){doublec=a+(b-a)/2return(F(a)+4*F(c)+F(b))*(b-a)/6}doubleasr(doublea,doubleb,doubleeps,doubleA){doublec=a+(b-a)/2doubleL=simpson(a,c),R=simpson(c,b)if(fabs(L+R-A)<=15*eps)returnL+R+(L+R-A)/15.0returnasr(a,c,eps/2,L)+asr(c,b,eps/2,R)}doubleasr(doublea,doubleb,doubleeps){returnasr(a,b,eps,simpson(a,b))}intmain(){scanf("%lf",&s)printf("%lf\n",asr(0,1e2,1e-10))return0}
n的阶乘就是从1到的累积,所以可以通过一个for循环,从1到n依次求积即可。
参考代码:
#include "stdio.h"
int main() {
int n,i,s=1
scanf("%d",&n)
for(i=1i<=ni++)//for循环求累积
s=s*i
printf("%d\n",s)
return 0
}
/*
运行结果:(例如求5的阶乘)
5
120
*/
扩展资料:
return用法:
return返回一个数值的意思就是把return<表达式>后面表达式的值返回给调用他的函数。举个例子:
int sum(int i,int j)
{
return i+j
printf("这个语句不会被执行,因为该子函数执行到上面的return语句就无条件结束了")
}
main()
{
int a=10,b=11,c
c=sum(a,b)
printf("%d",c)
}
#include <stdio.h>
main()
{
long n,sum=1//10 以上的阶乘就比较大了
int i
printf("请输入你要求的阶乘:")
scanf("%d",&n)//先输入要求的数
for(i=ni>0i--)//乘到1为止
{
sum*=i
}
printf("%d != %d",n,sum)
return 0
}