看着很像快速幂,但快速幂肯定要超时。于是乎。。
这种题目本来就很水(标签是提高+/省选,但实际也就普及),
而且又是最值问题,当然,x也那么的大,
故:用二分答案解决
16行代码
二分可行x,用求位数公式 len=(x*logx)/log(10)+1求出位数,
之后与len比较,小于则枚举右一半,否则左一半
输出是l
建议使用long long ,我也不知道开int会不会爆,于是开了long long
详见代码:
#include <bits/stdc++.h>
#define ll long long
ll n,l=1,r=1e12,mid,len;
using namespace std;
int main(){
scanf("%lld",&n) ;
while(l<r)
{
mid=(l+r)/2;
len=(mid*log(mid))/log(10)+1; //求位数公式
if(len<n) l=mid+1;
else r=mid;
}
printf("%lld",l) ;
return 0 ;
}