奇怪的函数
Description
洛谷P2759
使得
xx
达到或超过
n
位数字的最小正整数
Hint
乍一看是一道数学题
其实就是一道数学题
a
在
其实很好理解:
设
⌊x⌋
表示不超过
x
的最大整数,若
则
bk≤n<bk+1⇒k≤logbn<k+1
即 k=⌊logbn⌋ ,总位数 p=k+1
所以 xx 的位数就是 ⌊lgxx⌋+1 ,运用对数知识就是 ⌊xlgx⌋+1
然后考虑到对数函数是单调的,所以可以用二分答案
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL long long
using namespace std;
LL n,l=1,r=2e9;
int main(){
scanf("%lld",&n);
while(l<r){
LL mid=(l+r)>>1,len=(LL)(mid*log10(1.0*mid))+1;
if(len<n) l=mid+1;
else r=mid;
}
cout<<l<<endl;
return 0;
}