看了题解之后突然发现这题简直是水题。然而不看题解就想不出来。为什么呢?
len(x)=log10(x)+1
于是二分寻找x。
#include<iostream> #include<cmath> #include<cstdio> using namespace std; long long ans; int main(){ long long l=0,r=2000000000; int n; cin>>n; while(l<=r){ long long mid=(l+r)>>1; long long len=mid*log10(1.0*mid)+1; if(len<n) l=mid+1; else { ans=mid; r=mid-1; } } printf("%lld",ans); return 0; }