先来推一下: ∵log10xx>n−2 ∴x∗log10x>n−2 ∵x,log10x 都是单调递增的 ∴x∗log10x 是单调递增的 直接二分
/************************************************************************* > File Name: 2759.cpp > Author: huhao > Mail: 826538400@qq.com > Created Time: 2017/5/6 9:49:00 ************************************************************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<string> #include<iostream> #include<algorithm> #include<vector> #include<map> #include<set> #include<queue> using namespace std; #define inf 0x3f3f3f3f #define eps 1e-8 #define rt return #define gc getchar() #define ll long long #define fr(i,a,b) for(int i=a,_end_=b;i<=_end_;i++) #define fd(i,a,b) for(int i=a,_end_=b;i>=_end_;i--) void SWAP(int a,int b) { a^=b^=a^=b; } int read() { int r=1,t=0; char c=gc; while(c<'0'||c>'9') { if(c=='-') r=-1; else r=1; c=gc; } while(c>='0'&&c<='9') { t=t*10+c-48; c=gc; } rt r*t; } char readchar(int x,int y) { char c=gc; while(c<x||c>y) c=gc; rt c; } long long n,l,r; int main() { #ifndef ONLINE_JUDGE freopen("", "r", stdin); freopen("", "w", stdout); #endif n=read()-1; l=1; r=238723448; while(l<r) { long long mid=(l+r)>>1; if((log(mid)/log(10)*mid)>=n) r=mid; else l=mid+1; } printf("%lld\n",l); rt 0; }