题目描述
使得 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> #include<cstdio> #include<cmath> using namespace std; int l,r,ans,n; bool check(int x){ if(x*log(x)/log(10)>=n-1)return 1; return 0; } int main(){ scanf("%d",&n); l=0;r=2000000000; while(l<=r){ int mid=(l+r)>>1; if(check(mid)){ ans=mid; r=mid-1; } else l=mid+1; } cout<<ans<<endl; return 0; }