斯特林公式是用来估算阶乘的,n越大,结果越准确!
斯特林公式:
或更精确的:
或:
![](https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D116/sign=e0492cdb65600c33f479dac92c4d5134/d1a20cf431adcbeffd2391c9a2af2edda2cc9fee.jpg)
![](https://gss1.bdstatic.com/-vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D69/sign=28d15fcaebdde711e3d240ffa5ef21e9/34fae6cd7b899e51f200d5db4ca7d933c9950d77.jpg)
![](https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D97/sign=dfa39ecb990a304e5622acfdd3c814f3/8718367adab44aed0ccf542bbd1c8701a08bfb78.jpg)
![](https://gss1.bdstatic.com/-vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D69/sign=28d15fcaebdde711e3d240ffa5ef21e9/34fae6cd7b899e51f200d5db4ca7d933c9950d77.jpg)
如果要计算N后得到的数字为几位数,则我们可以知道其位数等于lgN!+1;
![\ln(n!) = \ln 1 + \ln 2 + \cdots + \ln n.](http://upload.wikimedia.org/math/b/d/e/bde6df6f84382a92e279f5626bed3606.png)
代码如下:
#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
int main ()
{
int w;
scanf("%d",&w);
while(w--)
{
int z, i;
double sum = 0;
scanf("%d",&z);
for(i = 1; i <= z; i++)
sum += log10( double(i) );
printf("%d\n",int(sum) + 1);
}
return 0;
}