题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路
想出来解法不难,难的是考虑全面,exponent 的正负零,base 的零,0^0,以及怎样高效的计算 power。
计算 power 的方式:
- a^n =
- a^(n/2) * a^(n/2),n 为偶数
- a^((n-1)/2) * a^((n-1)/2) * a,n 为奇数
public class Solution {
public double Power(double base, int exponent) {
// 判断非法输入
// 对于 0^0,因为无意义,所以结果为 0 或 1 都可以接受
boolean invalidInput = false;
if (base == 0 && exponent < 0) {
invalidInput = true;
return 0.0;
}
// 考虑指数为负数
int absExponent = exponent;
if (exponent < 0)
absExponent = - exponent;
double res = powerWithAbsExponent(base, absExponent);
if (exponent < 0)
return 1.0 / res;
return res;
}
public double powerWithAbsExponent(double base, int absExponent) {
if (absExponent == 0) return 1.0;
if (absExponent == 1) return base;
double res = powerWithAbsExponent(base, absExponent >> 1);
res *= res;
// 为奇数时
if ((absExponent & 1) == 1)
res *= base;
return res;
}
}