1、首先要理解一下阶乘的公式:
n! =n*(n-1)*(n-2)*....*2*1, 5! = 5*4*3*2*1
#include //头文件stdio.h在新浪博客中无法显示加上就可以了
int main()
{
int t=5,i=4; //要是求其他的数的阶乘的话,把t的值改为其他数,
//再把i改为(t-1)就行了
while(i>=1)
{
t=t*i;
i--;
}
printf("5的阶乘结果是:%d\n",t);
return 0;
}
2、运行结果如下:
3、上面这种方法虽然能求出结果,但是不能求任意的数,也没有考虑到0!=1,这种情况,我们来改进一下;
#include // //头文件stdio.h在新浪博客中无法显示加上就可以了
int main()
{
int n,jc;
int jiecheng(int j);
printf("请输入任意一个整数\n");
scanf("%d",&n);
jc=jiecheng(n);
printf("该数的阶乘结果是:%d\n",jc);
return 0;
}
int jiecheng(int j)
{
int i=j-1;
if(j==0 | j==1) // 因为0的阶乘是1 ,1的阶乘也是1
j=1;
while(i>1) //
{
j=j*i;
i--;
}
return(j);
}
4、运行结果如下:
str=JOptionPane.showInputDialog(null, str);
int n=Integer.parseInt(str);//获得输入的数n并转成整数
int s=1;//计算n的阶乘
for(int i=1;i<=n;i++)
{
s*=i;
}
JOptionPane.showMessageDialog(null, s+"", "n的阶乘", 1);
if(n==0||n==1) return 1;
return n*jiecheng(n-1);
}
上边是函数
调用 int x=jiecheng(n);
这主要用到了递归算法,不停的调用函数本身,知道某个条件时终止函数运行
int result=1;
for(int i=2;i<=n;++i)
result*=i;
return result;
}
能解释一下么
static int func(int n){
int result=1; //开始=1
for(int i=2;i<=n;++i) //然后从2乘到这个数,比如5
result*=i; //第一次循环*2,第二次循环*3,直到*5
return result;
}