当前位置 博文首页 > Keven_11的博客:C++题解:奇怪的函数

    Keven_11的博客:C++题解:奇怪的函数

    作者:[db:作者] 时间:2021-08-18 15:49

    ?????目录

    题目?

    题解


    题目?

    • ?1000ms
    • ?131072K

    使得?x^x?达到或超过?n?位十进制正整数的最小正整数?x?是多少?

    输入格式

    一个正整数?n?(1≤n≤2?10^9),表示位数。

    输出格式

    最小正整数?x。

    输出时每行末尾的多余空格,不影响答案正确性

    要求使用「文件输入输出」的方式解题,输入文件为?function.in,输出文件为?function.out

    样例输入

    5

    样例输出

    6

    题解:

    知识点:高中数学、对数函数

    分析:?n 位正整数最小是 10^(n?1) ,那么题目就是求 x^x≥10^(n?1)最小的正整数x。不等式两边都是正数且很大,我们考虑同时取对数,得 xlogx≥(n?1)log10,底数为e,然后用二分法解这个不等式。如果没学过二分,这道题可以先放一放。但如果是没学过对数函数的,问百度或我,但这道题必须做(我就是现学的)。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int main(){
        freopen("function.in","r",stdin);
        freopen("function.out","w",stdout);
        int n;
        cin>>n;
        int l=1,r=max(n,10);//注意r的取值范围
        while (l<r){//二分
            int mid=l+r>>1;
            if (1.0*mid*log(mid)>=1.0*(n-1)*log(10)){//上公式
                r=mid;
            }else{
                l=mid+1;
            }
        }
        cout<<l<<endl;
        return 0;
    }

    cs
    下一篇:没有了