题目描述
使得 x的x次方 达到或超过 n 位数字的最小正整数 x 是多少?
输入格式
一个正整数 n。
输出格式
使得 x的x次方 达到 n 位数字的最小正整数 x。
输入输出样例
输入 #1
11
输出 #1
10
说明/提示
对于全部数据,1≤n≤2×109。
如何判断一个十进制数的位数,log10(x)+1就是x的位数,题目中x的x次方很大,我们只需要变一下,xlog10(x)+1就变得很小啦!
随后我们只需要用二分枚举出x即可
上代码
#include<bits/stdc++.h>
using namespace std;
int n,l=1,r=1e10,mid;
bool cheek(int x){
if(x*log10(x)+1 >= n){
return true;
}else{
return false;
}
}
int main(){
cin>>n;
while(l<=r){
mid=l+(r-l)/2;
if(cheek(mid)){
r=mid-1;
}else{
l=mid+1;
}
}
cout<<l;
}