#include"stdio.h" #define N 10000 int a[N]={0}; int b[N]={0}; int fac(int,int,int ); int main() { int i; int temp,temp1; int n,m; a[0]=1; printf("please input a number:\n"); scanf("%d",&n); m=2; temp1=1; fac(n,m,temp1); for(i=N;a[i]==0;i--) temp=i; for(i=temp-1;i>=0;i--) printf("%d",a[i]); return 0; } int fac(int n,int m,int temp2) { int i,j,k,temp,temp1,flag; for(i=temp2+10;a[i]==0;i--) temp=i; for(i=0;i<temp || flag==1;i++) { flag=0; temp1=a[i]*m; if((b[i]+temp1%10)>9) { b[i+1]=b[i+1]+(b[i]+temp1%10)/10; } a[i]=(b[i]+temp1%10)%10; if(temp1>9) //对进位数组进行分析 { for(j=i;temp1>0;j++) { temp1=temp1/10; b[j+1]=b[j+1]+temp1%10; } for(k=i+1;k<=j+1;k++) //对进位的进位进行处理 { b[k+1]=b[k+1]+b[k]/10; b[k]=b[k]%10; } } for(j=2*temp2;b[j]==0;j--); //判断进位数组剩下的进位数是否为零 if(j>i) { flag=1; } } temp2=i; for(i=0;i<=j;i++) b[i]=0; if(m<n) return fac(n,++m,temp2); return 0; }