跳转至

50.Pow(x, n) (Medium)*

题目描述*

思路 & 代码*

快速幂

class Solution {
private:
    bool isEqual(double a, double b) {
        return a - b > -1e-6 && a - b < 1e-6;
    }
    inline double fastPow(double x, int n) {
        double res = 1.0;
        while(n) {
            if(n & 1) {
                res *= x;
            }
            x *= x;
            n >>= 1;
        }
        return res;
    }
public:
    double myPow(double x, int n) {
        // 底数是 0
        if(isEqual(x, 0.0)) {
            return 0.0;
        }
        if(isEqual(x, 1.0)) {
            return 1.0;
        }
        if(isEqual(x, -1.0)) {
            return n & 1 ? -1.0 : 1.0;
        }
        if(n == (signed int) 0x80000000) {
            return 0.0;
        }
        int sign = n < 0 ? -1 : 1;
        n *= sign;
        double res = fastPow(x, n);
        if(sign == -1) {
            res = 1.0 / res;
        }
        return res;
    }
};

最后更新: July 23, 2022