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

链接:https://www.nowcoder.net/acm/contest/75/A
来源:牛客网

题目描述

夫夫有一天对一个数有多少位数感兴趣,但是他又不想跟凡夫俗子一样,
所以他想知道给一个整数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
",ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/a249189046/p/8416790.html