下面链接是java的实现,思路叫清晰点

https://blog.51cto.com/6631065/2044441

#include<stdio.h>voidPrint_Factorial(constintN);intmain(){intN;scanf("%d",&N);Print_Factorial(N);return0;}voidPrint_Factorial(constintN){#defineMAX5000inta[MAX]={0},tmpA[MAX]={0},b[4]={0};intk,i,flag,j,temp,bit,l;intf1=0,f2=0,f3=0;/*如果小于0大于1000直接返回输入错误*/if(N<0||N>1000){printf("Invalidinput\n");return;}/*等于0输出1*/elseif(N==0){printf("%d\n",1);return;}/*大于0小于1000*/else{/*将数组a的第一位赋值为1,其余赋值为零*/a[0]=1;for(i=1;i<=N;i++){b[0]=b[1]=b[2]=b[3]=0;flag=i;/*将N的各位数进行分解,放入数组b中*/k=0;while(flag>0&&k<4){b[k]=flag%10;flag=flag/10;k++;}temp=0;bit=0;for(j=0;j<4;j++){/*使用tmpA存储的数值与b数组相乘,结果存到a数组中*/for(l=0;l<MAX;l++){temp=a[l]*b[j];tmpA[l+j]+=temp;}}for(k=0;k<MAX-1;k++){if(tmpA[k]>=10){temp=tmpA[k];tmpA[k]=tmpA[k]%10;tmpA[k+1]=tmpA[k+1]+temp/10;}}for(k=0;k<MAX;k++){a[k]=tmpA[k];tmpA[k]=0;}}}printf("\n");f3=0;for(k=MAX-1;k>=0;k--){if(a[k]>0)f3=1;if(f3>0)printf("%d",a[k]);}}


下面链接是java的实现,思路叫清晰点

https://blog.51cto.com/6631065/2044441