求一个大数的阶乘位数,直接求阶乘直接超出,故需要用公式:
直接求阶乘,该数不用保存,直接取对数加一便可。
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<stdio.h>
#include<math.h>
#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");
}