483 Smallest Good Base

Given a number in the range [3, 10^18], find a base such that every digit of the number represented by the number in base base is 1.

See: 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);
    }
};

 Reference: http://www.cnblogs.com/grandyang/p/6620351.html

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326214493&siteId=291194637