描述
夫夫有一天对一个数有多少位数感兴趣,但是他又不想跟凡夫俗子一样,
所以他想知道给一个整数n,求n!的在8进制下的位数是多少位。
输入
第一行是一个整数t((0,1000000]),接下来t行,每行一个整数n([0,10000000]);
输出
输出n!在8进制下的位数。
样例输入
3
4
2
5
样例输出
2
1
3
解析:
运用斯特灵公式和求位数的公式
把log10换成log8就可以求出8进制下的位数了
这道题n=0搞了我很久.. 0!=1 -> !!!!!!
#include <bits/stdc++.h>
const double pi=3.1415926;
const double e=2.71828182845;
int main()
{
int t,n;
scanf("%d",&t);
const double log_1=(log10(2.0*pi)/log10(8))*0.5; //log(x)=ln(x)
const double log_2=log10(e)/log10(8);
while(t--)
{
scanf("%d",&n);
if(n==1||n==0)
{
printf("1\n");
}
else
{
double s= log_1 + (n+0.5)*(log10(n)/log10(8)) - n * log_2; //ans = log10(2*n*Pi)/2+n*log10(n/e) (+ 1)
long long int c=ceil(s); //向上取整
printf("%lld\n",c);
}
}
return 0;
}