#include <stdio.h> int main(){ int arr[10000], i,N,m,z,up,temp;//m:模除结果;z整除结果;up:进位结果 while(scanf("%d",&N)!=EOF){ if(N==0){//N=0时,直接输出 printf("0\n"); break; } arr[0]=1; for(i=1;i<10000;i++)//初始化,arr[0]是个位 arr[i]=0; for(i=2;i<=N;i++){//N=1时,什么也不做,最后输出出来即可 up=0; for(int k=0;k<10000;k++){//每乘一个i,都i要遍历整个数组 temp=(arr[k]*i+up)%10;//temp先存一下新的arr[k] up=(arr[k]*i+up)/10; arr[k]=temp; } } for(int j=9999;j>=0;j--) if(arr[j]){//反向遍历,找到第一个非零数 for(;j>=0;j--){ printf("%d",arr[j]); } printf("\n"); break;//输出完,退出整个循环 } } return 0; }