階乗 n!
     n! = 1 x 2 x 3...x n

をまともにと計算していくと、かなりのコンピュータでも、すぐにオーバフローしてしまう。ということで、本関数のようにそれなりの工夫が必要。

なお、n! の桁数は スターリングの近似式

n! = nne-n(2nπ)1/2

より、

   

n log10(n/e) + (log10(2nπ)/2+1

で求められる。

<関数名>
  factorial ---- 階乗 n! の値を多桁数で算出する

<形式>
  int factorial(int *data, int n);

<引数>
  data (出力) n!の値が10進4桁ずつ入った整数の配列
  n   (入力) 階乗 n の値

<関数値>
  配列dataに計算値の入った要素の数(配列の先頭から)

用例
  int data[1000];
  factorial(data, 1000);

  1000! の値

<関数本体>
  factorial.c

Comments are closed.

Post Navigation