您的位置:首页 > 其它

牛客网 2018年全国多校算法寒假训练营练习比赛(第三场) A 不凡的夫夫(斯特灵公式)

2018-02-19 20:38 357 查看
描述
夫夫有一天对一个数有多少位数感兴趣,但是他又不想跟凡夫俗子一样,
所以他想知道给一个整数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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM
相关文章推荐