factorial 階乗n!の値を多桁数で算出する
int factorial(int *data, int n);
data (出力)n!の値が10進4桁ずつ入った整数の配列 n (入力) 階乗nの値
配列dataに計算値の入った要素の数(配列の先頭から)
int factorial(int *data, int n) { int i, j; int last; int *dap, *dap2; int t; long x; *data = 1; last = 0; for (i = 1; i <= n; i++) { t = 0; for (j = 0, dap = data; j <= last; j++) { x = *dap; x = x * i + t; *dap++ = x % 10000; t = x / 10000; } if (t != 0) { *dap = t; last++; } } for (dap = data, dap2 = data + last; dap < dap2; dap++, dap2--) { t = *dap; *dap = *dap2; *dap2 = t; } return last + 1; }
n! の桁数は スターリングの近似式 より、
で求められる。