题意:求N阶乘的位数.
分析:用斯特林近似公式求阶乘.一个数Num的位数=[lg(Num)]+1.
斯特林近似公式:N!≈(2*pi*N)^0.5*(n/e)^n.
于是N!的位数=ln((2*pi*N)^0.5*(n/e)^n)/ln(2).
用一些对数变换防止溢出.
code:
const e=2.71828182; pi=3.1415926; ln10=ln(10); lnpi=ln(pi); ln2=ln(2); var datanum,d,n:longint; ans1,ans2,lnn:extended; begin readln(datanum); for d:=1 to datanum do begin readln(n); lnn:=ln(n); ans1:=(ln(2)+ln(pi)+lnn)/2; ans2:=n*lnn-n; writeln(trunc((ans1+ans2)/ln10)+1); end; end.