目录
题目
- 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;
}