求一个数值的整数次幂(power)

2019-04-30  本文已影响0人  霍运浩

1. 求解思路:

需要判断幂值的情况
M=0:底数为任意值,结果为1;
M<0:底数不能为0,否则为无效输入;结果为倒数
M>0:底数为任意值
利用指数的二进制表示方法,使用&1和>>1逐位读取指数的二进制数据n,当n&1==1时,将该位所代表的乘数累乘到最终结果中。
原理:如10^1101 = 100001100100101000,代表1013

2. 代码实现

public class PowerTest {
    
    public static double powerT(double base, int exponent){
        double result=1,curr=base;
        int n;
        if (exponent>0) {//指数>0,则将指数值赋给n,保留原来指数值,再最后判断是返回结果原值,还是结果倒数
            n=exponent;
        }else if (exponent<0) {//指数<0,分母是不能为0的
            if (base==0) {
                throw new RuntimeException("分母不能为0");
            }
            n=-exponent;//使其变为正数
        }else {//指数==0
            return 1;
        }
        
        while (n!=0) {
            if ((n&1)==1) //指数的二进制数最后一位与1相与,看是否在该位置有值
                result*=curr;
            curr*=curr;//加倍
            n>>=1;//右移
        }
        
        return exponent<=0?1/result:result;
        
    }

    public static void main(String[] args) {
        // 1:0001
        // 2:0010
        // 3:0011
        // 4:0100
        // 5:0101
        //6: 0110
        System.out.println(powerT(11, 13));
        System.out.println(6 >> 1);
        System.out.println(5&1);
    }

}
上一篇 下一篇

猜你喜欢

热点阅读