2018年全国多校算法寒假训练营练习比赛(第三场)A.不凡的夫夫(斯特灵公式)
链接:https://www.nowcoder.net/acm/contest/75/A
来源:牛客网
题目描述
夫夫有一天对一个数有多少位数感兴趣,但是他又不想跟凡夫俗子一样,
所以他想知道给一个整数n,求n!的在8进制下的位数是多少位。
所以他想知道给一个整数n,求n!的在8进制下的位数是多少位。
输入描述:
第一行是一个整数t(0<t<=1000000)(表示t组数据)
接下来t行,每一行有一个整数n(0<=n<=10000000)
输出描述:
输出n!在8进制下的位数。
示例1
输入
3 4 2 5
输出
2 1 3
分析:查询的次数非常多,且直接开数组进行预处理会超内存
这里用到斯特灵公式。
八进制下的位数即log8(x)+1,log8用换底公式得到
代码如下:
#include <cstdio> #include <algorithm> #include <iostream> #include <vector> #include <cstring> #include <cmath> using namespace std; typedef long long LL; const double e = 2.718281828459; const double Pi=acos(-1.0); int main() { LL t,n,ans; scanf("%lld",&t); while(t--) { scanf("%lld",&n); if(n==0) { puts("1"); continue; } ans=(log10((2*Pi*n))/log10(8.0))/2+n*(log10(n/e)/log10(8.0))+1; printf("%lld\n",ans); } return 0; }