斯特林公式(对数的简便求法)1018

求一个大数的阶乘位数,直接求阶乘直接超出,故需要用公式:

斯特林公式(对数的简便求法)1018_第1张图片

直接求阶乘,该数不用保存,直接取对数加一便可。

log10,得到的是log10(n!) = log10(2*pi*n)/2+n*log10(n/e)

所以其位数应该可以表示为: log10(2*pi*n)/2+n*log10(n/e)+1

或者有:log10(a*b*c*d)=log10(a)+log10(b)+log10(c)+log10(d)

累加的方法得到。

#include

#include

#define pi 3.1415926

void main()

{

int n, k, m;

scanf("%d",&k);

while(k--)

{

double t;

scanf("%d",&n);

t = (0.5*log(2 * n*pi) + n*log(n) - n) / log(10);

m = (int)t + 1;

printf("%d\n",m);

}

system("pause");

}

你可能感兴趣的:(斯特林公式(对数的简便求法)1018)