当前位置 博文首页 > Keven_11的博客:C++题解:奇怪的函数
?????目录
题目?
题解
- ?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,然后用二分法解这个不等式。如果没学过二分,这道题可以先放一放。但如果是没学过对数函数的,问百度或我,但这道题必须做(我就是现学的)。
代码:
cs#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; }
下一篇:没有了