//下面是求10000的?乘 #include <stdio.h> typedef struct BigNum_ { int data[10000]; int n; } BigNum; BigNum* carry(BigNum* bn, int curr, int valid, int inc) { return curr>=valid && inc ? (++bn->n, bn->data[curr] = inc%10000, carry(bn, curr+1, valid, inc/10000)) : bn; } BigNum* mul(BigNum* bn, int n, int curr, int valid, int inc) { int t = inc+bn->data[curr]*n; return curr >= valid ? carry(bn, curr, valid, inc) : (bn->data[curr]=t%10000, mul(bn, n, curr+1, valid, t/10000)); } BigNum* power(BigNum* bn, int n, int p) { return --p ? (power(bn, n, p), mul(bn, n, 0, bn->n, 0)) : (bn->n=1, bn->data[0] = n, bn); } BigNum* fac(BigNum* bn, int n) { return n ? (fac(bn, n-1), mul(bn, n, 0, bn->n, 0)): (bn->n=1, bn->data[0] = 1, bn); } void show(BigNum* bn, int curr) { if (curr != bn->n) { show(bn, curr+1); curr == bn->n -1 ? printf("%d", bn->data[curr]) : printf("%04d", bn->data[curr]); !curr ? puts("") : 0; } } BigNum n; int main(int argc, char* argv[]) { show(fac(&n, 10000), 0); getch(); return 0; }
10000的阶乘
最新推荐文章于 2022-01-07 18:03:23 发布