奇怪的函数

【题目描述】

求出使得X^X达到或超过N位数字的最小正整数X是多少。

【输入描述】

输入一个正整数N。

【输出数据】

输出使得X^X达到或超过N位数字的最小正整数。

【输入样例】

11

【输出样例】

10

【数据范围及提示】

N <= 2000000000。

源代码:

#include<cstdio>
#include<cmath> //包含trunc()以及log()。
int n,ans,left=1,right=250000000; //题中所给的最大数据经验证不会超过此值。
int main() //二分答案。
{
    scanf("%d",&n);
    while (left<=right)
    {
        int t=(left+right)>>1,num=trunc(t*(log(t)/log(10))+1);
        if (num>=n)
        {
              right=t-1;
              ans=t;
        }
        else
          left=t+1;
    }
    printf("%d",ans);
    return 0;
}

/*
    C++取整函数:
        1.向上取整:ceil()
        2.向下取整:floor()
        3.截取整数:trunc()
        4.四舍五入:(int)(N+0.5)
*/

/*
    位数:
        ln(N)
        C++程序中表示为:log(N)/log(10)+1。 
    延伸:
        以x为底N的对数在C++程序中表示为:log(N)/log(x)。
*/
原文地址:https://www.cnblogs.com/Ackermann/p/5527838.html