数值的整数次方

给定一个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
24
class 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;
}
}

---------------- The End ----------------
0%