在算法群里看到有人问 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位数