(1)
将n!表示成10的次幂,即n!=10^M(10的M次方,10^2是3位M+1就代表位数)则不小于M的最小整数就是 n!的位数,对该式两边取对数,有M=log10^n!即: M = log10^1+log10^2+log10^3...+log10^n 循环求和,就能算得M值,该M是n!的精确位数。
(2)斯特林公式
n! = sqrt(2*π*n) * ((n/e)^n) * (1 + 1/(12*n) + 1/(288*n*n) + O(1/n^3))
π = acos(-1)// PI 3.141592654
e = exp(1) // e 2.71828182846
两边对10取对数
忽略log10(1 + 1/(12*n) + 1/(288*n*n) + O(1/n^3)) ≈ log10(1) = 0
得到公式
log10(n!) = (int)log10(sqrt(2 * pi * n)) + n * log10(n / e)+1) //n>1是该公式才成立
练习:http://blog.csdn.net/u014634338/article/details/38168717