数值的整数次方

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
* 求一个数的exponent次方,先把exponent用二进制表达,
* 例如11表示为 1 0 1 1,则结果为
* (1*base^8)*(0 * base^4)*(1*base^2)*(1*base);
* 且base^8 = base^4 * base^4; base^4 = base^2 * base^2;
* 这样,低位所求得的结果,可以在计算高一位的结果时复用,减少了计算量,
* 于是有如下算法。
**/
public class Solution {
public double Power(double base, int exponent) {
if (0 == base) {
return 0;
}else if (1 == base) {
return 1;
}else if (-1 == base){
return 0 == exponent % 2 ? 1 : -1;
}else if (0 == exponent){
return 1;
} else if (0 < exponent) {
double result = 1;
while (0 != exponent){
if (1 == (exponent & 1)) {
result *= base;
}
base *= base;
exponent = exponent >> 1;
}
return result;
} else {
return 1 / Power(base, 0 - exponent);
}
}
}