计算 100! (100的阶乘)有几位数


在算法群里看到有人问 100! 有几位数?
群里马上就有人用数学解答了,问题其实也不难,解决思路如下:

将n!表示成10的次幂, 即 n!=10^M (10的M次方) ,则不小于M的最小整数就是n!的位数,即位数 bits=M+1;
两边取对数,有 M=log10^n!
即: M = log10(1)+log10(2)+log10(3)…+log10(n)
计算即可得M

Common Lisp程序如下:

(defun factorial(n)
  (if (> n 1)
      (+ (log n 10) (factorial (- n 1)))
      (log 1 10)))
;;  (factorial 100) => 157.96999,即 100! 有158位数
,

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注