数位统计 一个十进制的数字x 如果想统计数位 可以用 log10(x)+1 对于整个结果 取整
例如 26 log10(26)+1 大概是二点几,取整,取到2
有了这一个知识的基础之上,我们可以发现数据在1到2*1e9;
如果你输入 2*1e9 x的x的位数要大于或者等于2*1e9 结果是238723448
如果是枚举的话 要有2亿多次 肯定超时 这个时候会发现 答案是线性递增 就可以用二分来做
#include<iostream>
#include<math.h>
using namespace std;
long long n;
bool check(long long x)
{
double wei =(long long)((double)( x * log10(1.0*x) + 1));
if (wei >= n)
{
return true;
}
else
return false;
}
int main()
{
cin >> n;
int le = 1, r = 2 * 1e9;
while (le < r)
{
long long mid = le + (r - le) / 2;
if (check(mid))//true 代表这个可以 可以继续缩
{
r = mid;
}
else//表示这个数还不太够 还需要继续放大
{
le = mid+1;
}
}
cout << le << endl;
}