给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解析:
1.全面考察指数的正负、底数是否为零等情况。
2.写出指数的二进制表达,例如13表达为二进制1101。
3.举例:10^1101 = 10^000110^010010^1000。
4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。
代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24class Solution {
public double Power(double base, int exponent) {
int exp;
if(exponent==0) //指数为0
return 1;
else if(exponent<0){ //指数为负整数
if(base==0) //底数为0,即分母为0
throw new RuntimeException("指数为负整数,则底数不能为0!");
exp = -exponent;
}
else
exp = exponent; //指数为正整数
double sum=1;
while(exp!=0){
if((exp&1)==1){ //括号不能少
sum=sum*base; //base * base^2 * base^4 * base^8 = base^(1+2+4+8) = base^1111
}
base=base*base; //翻倍:base、base^2、base^4、base^8
exp=exp>>1; //右移一位
}
return exponent>0?sum:1/sum;
}
}