题目描述
给定一个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 ; } }