我们知道整数n的位数的计算方法为:log10(n)+1
n!=10^m
故n!的位数为 m = log10(n!)+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=exp(1))
lgN!=(lg(2*pi)+lgN)/2+N*(lgN-lge);
斯特林公式可以用来估算某数的大小结合lg可以估算某数的位数,或者可以估算某数的阶乘是另一个数的倍数。
例题
https://www.nowcoder.net/acm/contest/75/A
题意 求解n的阶乘八进制下的位数
n!=8^res n!=e^m
res=log8(n!) m=loge(n!)
log8(n!)= loge(n!)/loge(8) res = m/loge(8)换底公式
m=loge(2*pi*n)/2+n*loge(n/e)
AC代码
#include#include #include <string.h> #include #include #include #include #include <string> #include #include