由于要求空间复杂度为常数,所以需要使用快速幂。以base^19为例,19对应的二进制数为10011,base^19可以分解成base^16 * base^2 * base^1,16、2、1都是2的整数次幂,可以通过base *= base快速得到。

class Solution {
public:
    double Power(double base, int exponent) {
        if (exponent == 0) return 1.0;
        if (base == 0) return 0;
        bool ism = false;
        if (exponent < 0) {
            ism = true;
            exponent = -exponent;
        }
        double res = 1;
        while (exponent) {
            if (exponent & 1) {
                res *= base;
            }
            base *= base;
            exponent >>= 1;
        }
        return ism? 1.0 / res: res;
    }
};