long jc(long n)
{
return n==0?1:n*jc(n-1);
}
main()
{
int n;
scanf("%d",&n);
printf("\n%ld\n",jc(n));
}16以前能算,以后试了几个怎么是负数?我菜高手解释下
潘安退避三舍,宋玉甘拜下风
我刚写了个可没数据验证,没敢发(怕误导大家),不管了,你们找东西验证吧
这个只可以计算750多以内的阶乘,当然可以改N的值,算出更大的n!,不过一个屏幕显示不了
[CODE]
#include <stdio.h>
#include <conio.h>
#define N 2000 /*存储每位数字*/
void Mul(int p[],int n)
{
static m=0; /*末尾0的个数*/
int i,j,k=0,d=1;
for(i=m;i<N;i++)
{
p[i]=p[i]*n+k; /*k是上一位的进位数*/
k=p[i]/10;
p[i]=p[i]%10;
if( (p[i]==0) && (d==1) ) /*计算末尾0的个数*/
m++;
else
d=0;
if(k==0)
{
for(j=i+1; (j<N) && (p[j]==0); j++); /*如果未进行计算的各位为0,break;*/
if(j>=N)
break;
}
}
}
void main()
{
int a[N]={0};
int i,n;
scanf("%d",&n);
a[0]=1;
for(i=1;i<=n;i++)
Mul(a,i);
for(i=N-1; (i>=0) && (a[i]==0); i--); /*去掉前导的0*/
for(;i>=0;i--)
printf("%d",a[i]);
getch();
}
[/CODE]