南阳 69 数的长度

Stirling公式(斯特林公式)
N!=1*2*3*4*5*............*N;
如果要计算N!后得到的位数,则我们可以知道其等于lgN!+1
lgN!=lg1+lg2+lg3+lg4+lg5+....................+lgN;
但是当N很大的时候,我们可以通过数学公式进行优化:(即Stirling公式)
N!=sqrt(2*pi*N)*(N/e)^N;(pi=3.1415926=acos(-1.0),e=2.718)
lgN!=(lg(2*pi)+lgN)/2+N*(lgN-lge);
斯特林公式可以用来估算某数的大小结合lg可以估算某数的位数,或者可以估算某数的阶乘是另一个数的倍数。
#include<stdio.h>
#include<math.h>
int main()
{
    int n,m;
    double s;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&m);
        s=0;
        while(m)
        {
            s+=log10(m);
            m--;
        }
        printf("%d\n",(int)s+1);
    }
    return 0;
}
 

你可能感兴趣的:(南阳 69 数的长度)