LeetCode每日一题50.Pow(x,n)(快速幂)

274 阅读1分钟

地址:leetcode-cn.com/problems/po…

class Solution {
    public double myPow(double x, int n) {
        if (x == 0) {
            return 0;
        }
        //如果是Integer.MIN_VALUE转换成正数会越界采用long类型接收
        long newN = n;
        double ans = 1;
        if (newN < 0) {
            x = 1 / x;
            newN *= -1;
        }

        while (newN > 0) {
            //奇数次幂就相乘
            if (newN % 2 == 1) {
                ans *= x;
            }
            //偶数次幂就自乘,幂除2
            x *= x;
            newN >>= 1;

        }
        return ans;
    }
}