剑指Offer_12

题目

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

解题思路

举个例子:3的11次方
直接将3累乘11次肯定不是一个优解方案。
3的11次方可以写成3 ^(1101)
等价于 (3的1次方) (3的0次方) (3的4次方) (3 的8次方);
ret = (3)
(1) (3 3 3 3) (3 3 3 3 3 3 3 3 )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Solution {
public double Power(double base, int exponent) {
if(exponent == 0){
return 1.0;
}
if(base == 0){
return 0.0;
}
int p = Math.abs(exponent);
double ret = 1.0;
while(p != 0){
if((p & 1) == 1){
ret *= base;
}
p >>= 1;
base *= base;
}
return exponent > 0 ? ret : 1 / ret;
}
}