hdu 1018big number

分析:
    123456=1.23456*10^5;
    log10(123456)=5.09151;
    log10(1.23456*10^5)=log10(1.23456)+log10(10^5)=0.09151+5;
    故int(log10(n))+1 就是n的位数

点击打开链接


主要介绍一种算法Stirling:
log10(n!)=log10(1*2*3…*n)=log10(1)+log10(2)+…+log10(n)
《计算机程序设计艺术》中给出了另一个公式
 
n! = sqrt(2*π*n) * ((n/e)^n) * (1 +1/(12*n) + 1/(288*n*n) + O(1/n^3))
π = acos(-1)
e = exp(1)
两边对10取对数
忽略log10(1 + 1/(12*n) +1/(288*n*n) + O(1/n^3)) ≈ log10(1) = 0
得到公式
log10(n!) = log10(sqrt(2 * pi * n)) + n* log10(n / e)。