题意:如标题
方法一:
利用 log10(1)+log10(2)+....log10(n)向下取整再加一:
double cnt=0;
for(int i=1; i<=n; i++)
cnt += log10(i*1.0);
int ans; //若是直接另cnt = (int)cnt+1会出错。
ans = (int )cnt + 1;
//或者
ans = (floor)cnt + 1;
方法二:
Stirling(斯特林)公式:
n! = sqrt(2π)*n^(n+1/2)*e^(-n);
所以
log10(n!)=log10(2*π*n)/2+n*log10(n/e) + 1;