51nod1058这个问题让我们求出n的阶乘的长度。 n的范围最多到1e6,很明显龙龙会破裂。 那么,结果需要直接计算出斯特林的公式。 这个公式的作用是求出n次幂的近似值。
我们知道求十进制x的位数,log10(x ) 1。
用斯特林的公式带入x,两边取对数
我知道斯特林公式的作用。 上式的左边n! 会爆炸,但右边的项目都不会爆炸。 因为取得了对数。 这样就可以计算位数了。
说明cmath数据库对数函数的使用方法,log10(x )是以10为底的对数,log ) x )是以e为底的对数。
下面的代码使用了一个改变底部的表达式,以便不知道e的确切值。
# include bits/stdc.h # define INF0x 3f 3f # defined (x ) cout (x ) x ) endlusing namespace std; typedef long ll; const int mod=1e9 7; const int N=1e5 10; const double PI=3.1415926; int n; int main () Scanf ) ' %d ',n ); intpos=int((0.5*log )2*pi*n ) ) log(n-1 ) )/log ) 10 ) ) printf(%d(n )、pos 1); 返回0; }