483.最小好進位制
阿新 • • 發佈:2018-12-07
對於給定的整數 n, 如果n的k(k>=2)進位制數的所有數位全為1,則稱 k(k>=2)是 n 的一個好進位制。
以字串的形式給出 n, 以字串的形式返回 n 的最小好進位制。
示例 1:
輸入:"13" 輸出:"3" 解釋:13 的 3 進位制是 111。
示例 2:
輸入:"4681" 輸出:"8" 解釋:4681 的 8 進位制是 11111。
示例 3:
輸入:"1000000000000000000" 輸出:"999999999999999999" 解釋:1000000000000000000 的 999999999999999999 進位制是 11。
提示:
- n的取值範圍是 [3, 10^18]。
- 輸入總是有效且沒有前導 0。
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);
}
};