数值的整数次方

时间:2023-01-16 19:31:22

关键的就是要利用前面的结果,不要一步一步往后乘。

比如2^8可以利用2^2,2^4等

这里就要涉及到二进制的右移>>1和&1

public double Power(double base, int n) {
        double res = 1,curr = base;
        int exponent;
        if(n>0){
            exponent = n;
        }else if(n<0){
            if(base==0)
                throw new RuntimeException("分母不能为0"); 
            exponent = -n;
        }else{// n==0
            return 1;// 0的0次方
        }
        while(exponent!=0) {
            if((exponent&1)==1) {
                res*=curr;
            }
            curr*=curr;//翻倍
            exponent>>=1;
        }
        return n>=0?res:(1/res);
    }