求n的阶乘的位数

题意:如标题

方法一:
利用 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; 

你可能感兴趣的:(#,基础题)