// ²òÅú2.5 fact4.c // 30¤Î³¬¾è #include #include #define M (10000*10000) unsigned int lo = 1; unsigned int ml = 0; unsigned int mh = 0; unsigned int hi = 0; void mul(int k) { int c=0; lo *= k; lo += c; c = lo/M; lo %= M; ml *= k; ml += c; c = ml/M; ml %= M; mh *= k; mh += c; c = mh/M; mh %= M; hi *= k; hi += c; c = hi/M; hi %= M; } void fact(int n) { hi=mh=ml=0; lo=1; for (int i=1;i<=n;i++) { if (i>1) mul(i); } printf("%08u%08u%08u%08u\n", hi, mh, ml, lo); } int main() { int n; for (n=1;n<=30;n++) { printf("%02d:",n); fact(n); } return 0; }