#include"stdio.h" 
#include"stdlib.h"  
#include"string.h"  
#define N 10000  
int a[N];  
int main()  
{  
    int i,j,n,len;  
    while(scanf("%d",&n)!=-1)  
    {  
        memset(a,0,sizeof(a));     //初始化数组  
        a[0]=1;                 //注意:0!=1  
        len=1;                     //刚开始数组长度为一  
        for(i=1;i<=n;i++)  
        {  
            a[0]*=i;  
            for(j=1;j<len;j++)  
            {  
                a[j]*=i;  
                a[j]+=a[j-1]/N;  
                a[j-1]%=N;  
            }  
            while(a[len-1]>=N)        
            {  
                a[len]=a[len-1]/N;  
                a[len-1]%=N;  
                len++;  
            }  
        }  
        printf("%d",a[len-1]);  
        for(i=len-2;i>=0;i--)            
            printf("%04d",a[i]);             //每个数组元素均应该占4位,不够的前面补零。  
        printf("\n");  
    }  
    return 0;  
}  
原文:http://www.cnblogs.com/wangkun1993/p/6287925.html