题目描述
使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少?
输入输出格式
输入格式:
一个正整数 n
输出格式:
使得 x^x 达到 n 位数字的最小正整数 x
输入输出样例
说明
n<=2000000000
对于任意的X,其实x^x的位数是可以通过公式计算的:log10(x) * x + 1(可以问问百度 )。这样我们可以很容易的验证答案。于是很容易就想到了二分答案。所以我们二分X的值就可以了,代码如下:
#include<iostream> #include<algorithm> #include<cmath> #define LL long long using namespace std; LL n; LL ct(LL x) { return (LL)floor((log10(x)) * (long double)x) + 1; } LL DF(LL l, LL r) { while(l < r) { int mid = l + r >> 1; if(ct(mid) < n) l = mid + 1; else r = mid; } return l; } int main() { cin >> n; cout << DF(0, 1 << 30); return 0; }
没有帐号? 立即注册