给定一个范围在[3, 10^18]中的一个数, 找到一个进制base, 使得该数在base进制下表示的数的每一位都是1。
详见:https://leetcode.com/problems/smallest-good-base/description/
C++:
class Solution {
public:
string smallestGoodBase(string n)
{
long long num = stol(n);
for (int i = log(num + 1) / log(2); i >= 2; --i)
{
long long left = 2, right = pow(num, 1.0 / (i - 1)) + 1;
while (left < right)
{
long long mid = left + (right - left) / 2, sum = 0;
for (int j = 0; j < i; ++j)
{
sum = sum * mid + 1;
}
if (sum == num)
{
return to_string(mid);
}
else if (sum < num)
{
left = mid + 1;
}
else
{
right = mid;
}
}
}
return to_string(num - 1);
}
};
参考:http://www.cnblogs.com/grandyang/p/6620351.html