#include<stdio.h>#defineMAXN1000int a[MAXN], b[MAXN];voidpnext(int k,int*cp)//已知a[]中的(k-1)!,求出k!存于a[];{int c =*cp, i, m, r;for( i =0; i < c; i++) b[i]= a[i];
a[c]=0;for( m =1; m < k; m++){//通过累加求k!for( i =0; i < c; i++){
r = a[i]+ b[i];
a[i]= r %10;
a[i+1]+= r/10;//处理最高位进位
r = a[c];while( r >0){
a[c++]= r %10;
r = r/10;}*cp = c;}}}voidwrite(int*a,int k,int c){int i;printf("%4d!= ", k);for( i = c -1; i >=0; i--)printf(" %d", a[i]);printf("\n\n");}intmain(){int n,c,k;printf(" Enter the number n(<=100):");scanf(" %d",&n);
a[0]=1;
c =1;write(a,1, c);for( k =2; k <= n; k++){pnext(k,&c);write(a, k, c);}}