成语玩命猜太阳星星:一个求n!的程序,哪个来讲一下

来源:百度文库 编辑:高校问答 时间:2024/05/01 22:18:53
#include <stdio.h>
#include <malloc.h>
void main()
{
int m,i,j,c,t;
int MAXN;
int *a;
scanf("%d",&MAXN);
a=(int *)malloc(3*MAXN*sizeof(int));

a[0]=1;
m=1;
for(i=2;i<=MAXN;i++)
{
for(c=0,j=0;j<m;j++)
{
t=a[j]*i+c;
a[j]=t%10;
c=t/10;
}
while(c)
{
a[m++]=c%10;
c/=10;
}
}
printf("%d!=",MAXN);
for(j=0;j<=(m-1)/2;j++) { t=a[j]; a[j]=a[m-1-j]; a[m-1-j]=t; }
for(j=0;j<m;j++) printf("%d",a[j]);
printf("\n");

}
其实我最希望的是大家给我讲讲这个程序的算法而不是给个新程序

呵呵如果n是10000呢?那其不是没有数据类型能满足了……
我推荐一个求超大数的阶乘的方法:
求10000!
#include<math.h>
#include<stdio.h>
int main()
{ long i;
double ln=0;
for(i=1;i<=10000;i++)
ln+=log10(i);
i=(long)ln;ln=pow(10,ln-i);
printf("10000!=%lf*10^%ld\n",ln,i);
return 0;
}
希望对你有帮助……

太麻烦了吧

main()
{
int max,i;
long a=1;
scanf("%d",&max);
for(i=1;i<=max;i++)
{
a*=i;
}
printf("%d",a);
}

这个程序主要是考虑到n!的结果很大,大到靠四个字节的int都
无法表示,所以它采用申请int型数组来表示的方法