奇怪的函数

【题目描述】

求出使得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)。
*/
时间: 2024-10-07 00:35:19

奇怪的函数的相关文章

洛谷 P2759 奇怪的函数

P2759 奇怪的函数 题目描述 使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少? 输入输出格式 输入格式: 一个正整数 n 输出格式: 使得 x^x 达到 n 位数字的最小正整数 x 输入输出样例 输入样例#1: 11 输出样例#1: 10 说明 n<=2000000000 思路:根据换底公式 可以推得,当x*log10(x)==n-1时x^x恰好为n位数,所以二分查找即可,在特判一下为1的情况. #include<cmath> #include<cstdio>

cogs 558 奇怪的函数

提交地址:http://cojs.tk/cogs/problem/problem.php?pid=558 558. 奇怪的函数 ★☆   输入文件:xx.in   输出文件:xx.out   简单对比时间限制:1 s   内存限制:32 MB 问题描述 使得x^x达到或超过n位数字的最小正整数x是多少? 输入数据 输入一个正整数n. 输出数据 输出使得x^x达到n位数字的最小正整数x. 输入样例 11 输出样例 10 时间限制 各测试点1秒 内存限制 你的程序将被分配32MB的运行空间 数据规模

洛谷P2759 奇怪的函数

P2759 奇怪的函数 题目描述 使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少? 输入输出格式 输入格式: 一个正整数 n 输出格式: 使得 x^x 达到 n 位数字的最小正整数 x 输入输出样例 输入样例#1: 11 输出样例#1: 10 说明 n<=2000000000 换底公式 /* 相当于解不等式x^x>=10^(n-1) 两边取常用对数 x*log10(x)>=n-1 左边是单调增的 然后二分查找就行了 */ #include<iostream> #

asp中的一个奇怪的函数

/* 豆腐制作 都是精品 http://www.asp888.net 豆腐技术站 如转载 请保留版权信息 */ asp中有很多的文章在研究如何提高asp程序的执行效率,我们 得出结论 在<% 和 %> 之间的代码执行的速度要高于 在这个 标签之外的代码,我们有没有想过 如何重复的利用这些在标签之外的代码呢? 有的人可能觉得 这个没有什么意义!但是我们可以 怀着 一种很轻松的心态来看看下面这个例子,看看 我们得到了什么有趣的现象!在这个例子中,我们用到了 MSDN 中没有介绍的 WriteBlo

奇怪的函数 (wikioi 3538/1696) 题解

[题目描述] 给定n,使得x^x达到或超过n位数字的最小正整数x是多少? [样例输入] 11 [样例输出] 10 [解题思路] 首先想到枚举,但是范围有点大,n<=2*10^9,果断用二分.其实这道题并不难,要用到一个求位数的公式trunc(t*(ln(t)/ln(10)))+1,初三自然是没学的,直接抄上公式,AC……,二分的时候注意一下退出的条件.(wikioi上1696和3538的题目不一样,但同一个程序都能AC,也不知道1696中的k是干嘛的……) [代码实现] 1 var n:qwor

好题收集(2) 奇怪的函数(数学)

奇怪的函数 Description洛谷P2759使得$x^x$达到或超过 $n$ 位数字的最小正整数 $x$ 是多少? Hint乍一看是一道数学题其实就是一道数学题$a$ 在 $b$ 进制下的位数 $p$ 的计算公式为 $p=\lfloor log_b a \rfloor+1$其实很好理解:设$\lfloor x \rfloor$表示不超过 $x$ 的最大整数,若 $n=(a_k,a_k-1,…a_1,a_0)_b,a_k≠0$,则$$b^k≤n<b^{k+1} ⇒k≤log_bn<k+1$$

【CodeVS】 p1696 奇怪的函数

题目描述 Description 自从得到上次的教训后,John的上课态度认真多了,也变得更爱动脑筋了.今天他又学习了一个新的知识:关于 xk 的位数. 如果x大于0小于l,那么位数=1+小数部分×k, 如果x≥l,那么位数=trunc(ln(x)/ln(10)×k)+1+小数部分×k. 根据这些函数知识,他学会了求xk的位数了.但他又想到了另外一个问题,如果已知位数N,能不能求出使得 xk 达到或超过N位数字的最小正整数x是多少? 输入描述 Input Description 输入一个正整数n

P2759 奇怪的函数

题目描述 使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少? 输入输出格式 输入格式: 一个正整数 n 输出格式: 使得 x^x 达到 n 位数字的最小正整数 x 输入输出样例 输入样例#1: 11 输出样例#1: 10 说明 n<=2000000000 题解:二分答案 实质是求 x^x>=10^(n-1), log(x^x)>=log(10^(n-1)) x*log(x)>=n-1 因为左边是单调的 二分即可. 代码: #include<iostream>

【洛谷P2759】奇怪的函数

x^x>=10^(n-1) lg x^x>=n-1 x*lg x>=n-1 x*(log2 x/log2 10)>=n-1 左边单调递增,二分x即可 1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 using namespace std; 5 const int N=1000000000; 6 int n,l,r,mid; 7 int check(int x){ 8 if (x

luogu P2759 奇怪的函数 二分答案+数论

题目描述 使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少? 输入输出格式 输入格式: 一个正整数 n 输出格式: 使得 x^x 达到 n 位数字的最小正整数 x 输入输出样例 输入样例#1: 11 输出样例#1: 10 说明 n<=2000000000 判断位数important #include<iostream> #include<cmath> using namespace std; int n; bool can(int x) { if(x*(log(x