剑指 Offer 16. 数值的整数次方

class Solution {
    public double myPow(double x, int n) {
        if(x==0) return 0;
        //快速幂
        double ans = 1.0;
        long n_tmp = n;

        //如果n为负数
        if (n_tmp < 0) {
            x = 1/x;
            n_tmp = -n_tmp;
        }

        while (n_tmp > 0) {
            if ((n_tmp&1) == 1) {   //如果n为偶数
              ans *= x;
            }
            x = x*x;
            n_tmp >>= 1;
        }
        return ans;
    }
}

注意这里有一个坑点:

Java代码中int32的变量n∈[-2147483648, 2147483647],因此当n=-2147483648时,执行n = - n会发生越界错误,解决的方法是提前将n保存到long类型的变量中,之后用long类型的变量进行操作。

posted @ 2021-03-09 15:37  Peterxiazhen  阅读(45)  评论(0编辑  收藏  举报