题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0

思路:

** * 1.全面考察指数的正负、底数是否为零等情况。**
** * 2.写出指数的二进制表达,例如13表达为二进制1101。**
** * 3.举例:10^1101 = 10^000110^010010^1000。**
** * 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。**

代码:

public class Solution {
    public double Power(double base, int exponent) {

        if (exponent == 0) {
            return 1;
        }
        if (exponent == 1) {
            return base;
        }
        if (base == 0){
            return 0;
        }
        boolean flag = exponent > 0 ? true : false;
        if(exponent < 0){
            exponent = -exponent;
        }
        double ans = 1;
        while(exponent > 0 ){
            if((exponent & 1) == 1){
                ans = ans * base;
            }
            exponent >>= 1;
            base *= base;
        }
        return flag ? ans : 1/ans ;

  }
}