先来推一下:
∵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;
}