题意:求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.
浙公网安备 33010602011771号