斯特灵公式是一条用来取n阶乘近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用,而且,即使在n很小的时候,斯特灵公式的取值已经十分准确。
用
Stirling
公式计算
n!
结果的位数时,可以两边取对数,得:
log10(n!) = log10(2*PI*n)/2+n*log10(n/E);
故n!的位数为
log10(2*PI*n)/2+n*log10(n/E)+1(注意:当n=时,算得的结果为0)
用Stirling公式计算n!结果的位数时,可以两边取对数,得: log10(n!) = log10(2*PI*n)/2+n*log10(n/E);故n!的位数为 log10(2*PI*n)/2+n*log10(n/E)+1(注意:当n=1时,算得的结果为0)
代码如下:
#include<cstdio>
#include<iostream>
#include<cmath>
#define PI 3.1415927
const double E=exp(double(1));
using namespace std;
int main()
{
int t,m,i,j,n;
double sum;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n==0)
{
cout << "1" << endl;
continue;
}
int len = int(log10(sqrt(2*PI*n))+n*log10(n/E))+1;
cout << len << endl;
}
return 0;
}
顺带说下今天刚学的函数EXP函数。
exp函数————求以自然数e为底的指数值。
代码如下:
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double x=1.0;
cout << exp(x) << endl;
return 0;
}
就是我们上数学时说的log以e为底的数。