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
}
常见的有两种:
递归版本:
int Fac(int n){if(n==0) return 1
return n*Fac(n-1)
}
还有一种是循环版:
int ans=1for(int i=1i<=ni++) ans*=i
测试方法:
#include<stdio.h>int Fac(int n){
if(n==0) return 1
return n*Fac(n-1)
}
int main(){
int n
while(scanf("%d",&n)!=EOF){
int ans=1
for(int i=1i<=ni++) ans*=i
printf("%d %d\n",ans,Fac(n))
}
return 0
}
有个值得注意的地方:阶乘时,数增大的很快,在n达到13时就会超过int的范围,此时可以用long long或是 __int64来存储更高精度的值,如果还想存储更高位的,需要用数组来模拟大数相乘。