题目
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
解析
这道题需要注意的问题是各种情况的判断:
- 当 exponent < 0 时,要先对指数取绝对值,然后把结果取倒数
- 当 exponent < 0 且 base == 0 时,会出现分母为 0 的情况。
- 可以用一下公式简化
Java代码
public class Solution {
public double Power(double base, int exponent) {
int n = exponent;
if (exponent == 0) {
return 1;
} else if (exponent < 0) {
if (base == 0) {
throw new RuntimeException("分母不能为0");
}
n = -exponent;
}
double res = PowerUnsignedExponent(base, n);
return exponent < 0 ? 1/res : res;
}
private double PowerUnsignedExponent (double base, int n) {
if (n == 0)
return 1;
if (n == 1)
return base;
double res = PowerUnsignedExponent(base, n >> 1);
res *= res;
if (n >> 2 == 1)
res *= base;
return res;
}
}