Stirling公式:
n!约等于sqrt(2*pi*n)*(n/e)^n
另外,e约等于2.71828182845409523...
试了一下发现math库里面并不能像pi一样直接调e但是发现挺好记的。。>_<
POJ1423
题面很简单,就是让我们计算n!的位数。
我们知道十进制数的位数=trunc(ln(n)/ln(10))+1
而对于n=a*b,ln(n)=ln(a)+ln(b)
所以ln(sqrt(2*pi*n)*(n/e)^n)=ln(sqrt(2*pi*n))+n*ln(n/e),对于每个询问就可以O(1)求出位数辣!
1 program poj1423; 2 const e=2.7182818284590452354; 3 var t,test,n:longint; 4 begin 5 readln(test); 6 for t:=1 to test do 7 begin 8 readln(n); 9 writeln(trunc((n*ln(n/e)+ln(sqrt(2*pi*n)))/ln(10))+1);10 end;11 end.