编程实现计算n!,也就是n*(n-1)*(n-2)*....*1,可以通过递归函数来实现,具体实现方法:
#include <stdio.h>
int Func(int n)
{
if(n <2)
return 1
else
return n*Func(n-1)
}
void main()
{
int n =0,m=0
printf("铅凳请输入一个正整数:")
scanf("%d",&n)
m=Func(n)
printf("%d!=%d\n",n,m)
}
在以上程序代码中,Func()为递归函数,主函数main()中接收键盘输入整数值后,调用Func()递归函数,首层m=n*(n-1)!,继续递归调用,m=n*(n-1)(n-2)!,这样逐层递归,直到计算出N!。
程序输出结果如下:
扩展资料:
所谓n的阶乘就是从1到n的乘积,所喊逗以除了递归法来实现以外,其实我们也可以通过一个for循环,从1到n依次求积同样可以达到计算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
*/
1、求n!就是n的阶乘首先打开vc++ 6.0软件,准备一个新的c语言文件,命名为multiply.cpp,然后引入C语言基本库,创建一个main函数:
2、然后在man函数中输旁铅入代码。这里所谓的n的阶乘,就是从 1 开始乘以比前一个数大 1 的数,一直乘到 n,在for循环中不断计算f和n相乘,每轮计算完就n就减1,直到n=1结束计算运陵好。最后打印出计算结果程序就编写完成了:
3、最后编汪族译运行这段程序,在打开的命令行中,输入任意一个数计算结果,可以看到显示出了计算值以上就是用c语言的求n!的方法就是:
#include"iostream.h"#include"math.h"
#include"stdlib.h"
#include"iomanip.h"
int getn()
{
int n
cout<<"请输入N!中的N\n"
cin>>n
while(n<0)
{
cout<<"输入有错!请重新输入!"<<endl
cin>>n
}
if(n==0)
exit(1)
return n
}
int getbitnum(int n)
{
double sum=1.0
for(int i=1i<ni++)
sum+=log10(i)
return (int)sum
}
char * init(int size)
{
char *pa=new char[size]
if(!pa)
{
cout<<"too large factor of"<<size<<endl
exit(1)
}
pa[0]=1
for(int i=1i<sizei++)
pa[i]=0
return pa
}
void calc(char *a,int n)
{
double bitcount=1
int begin=0
for(int i=2i<=ni++)
{
long and=0
bitcount+=log10(i)
if(a[begin]==0)
begin++
for(int j=beginj<int(bitcount)j++)
{
and+=i*a[j]
a[j]=char(and%10)
and/=10
}
}
}
void display(char *a,int size)
{
int bit=0
for(int i=size-1i>=0i--)
{
if(bit%60==0)
cout<<endl<<"第"<<setw(3)<<(bit/闭掘轿50+1)<<"个50位:"
cout<<轿肆(int)a[i]
bit++
}
cout<<endl
}
void main()
{
int n=getn()
int size=getbitnum(n)
char *pa=init(size)
calc(pa,n)
display(pa,size)
delete []pa
}
楼上的几位代码没有错误,我赞同。但是只能算一些n比较小散腊的阶乘,遇到数字大的就会溢出。楼主可以试试1000的阶乘。我的这个可以算大一点的数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)