对于一个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; }