给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent。求 base 的 exponent 次方。保证 base 和 exponent 不同时为 0
本题需要考虑三种情况:
- exponent == 0
- exponent > 0
- exponent < 0
解法一
暴力解法,分三种情况考虑
public class Solution {
public double Power(double base, int exponent) {
if(exponent < 0) {
base = 1 / base;
exponent = -exponent;
}
if(exponent == 0) {
return 1.0;
}
double result = 1.0;
for(int i = 1; i <= exponent; i++) {
result *= base;
}
return result;
}
}
解法二
使用快速幂可以解决该问题,假设我们求 x8,如果我们知道 x4,那么 x8 = (x4)2,所以 xn = (xn/2)2
但是还有个小问题,如果 n 是偶数,那么上述没问题。如果 n 是奇数,则 xn = (xn/2)2 * x
public class Solution {
public double Power(double base, int exponent) {
if(exponent < 0) {
base = 1 / base;
exponent = -exponent;
}
return q_Power(base, exponent);
}
private double q_Power(double base, int exponet) {
if(exponet == 0) {
return 1.0;
}
double result = q_Power(base, exponet / 2);
if((exponet & 1) != 0) {
return result * result * base;
} else {
return result * result;
}
}
}