阶乘的位数

—对于一个B进制的数,只需要对其取以B的对数就可以得到他在B进制情况下的位数(取了对数之后可能为小数,所以还需要取整后再+1)
—N!的位数就是[lg(N!)]+1=[lg(1)+lg(2)+…+lg(N)]+1
—=(int)ceil[(n*ln(n)-n+0.5*ln(2*n*π))/ln(10)]/*ceil是向上取整,[]符号为取整*/
—最后一个式子被称为斯特林公式
例如:
#include <iostream>
using namespace std;
#define pi 3.141592657
#include<math.h>
int main()
{
    int n;
    cin>>n;
    cout<<(int)(ceil((n*log(n)-n+0.5*log(2*n*pi))/log(10)))<<endl;
    
    return 0;
}

 

 
原文地址:https://www.cnblogs.com/hsqdboke/p/2458649.html