题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
- 保证base和exponent不同时为0
题目分析
这道题目其实不难,但是要仔细计算,主要有指数为0,负数与正数三种情况,
- 0时,只要base!=0,result=1
- 正数时,可以使用指数的快速幂计算,公式如下:
a n = { a n / 2 ∗ a n / 2 , if n 是偶数 a ( n − 1 ) / 2 ∗ a ( n − 1 ) / 2 ∗ a , if n 是奇数 a^n= \begin{cases} a^{n/2}*a^{n/2}, & \text{if $n$ 是偶数} \\ a^{(n-1)/2}*a^{(n-1)/2}*a, & \text{if $n$ 是奇数} \end{cases} an={an/2∗an/2,a(n−1)/2∗a(n−1)/2∗a,if n 是偶数if n 是奇数
- 负数时,要注意base=0,无意义这种情况,其余只要取倒数即可。
java代码
public double Power(double base, int exponent) {
// 考虑一集中情况
// 1.exponent为负数时,base为0的情况
// 2.exponent为0时的情况
// 3.指数的快速计算方式
if(exponent<0 && base==0){
// 错误时,返回0.0
return 0.0;
}
if(exponent == 0){
return 1.0;
}
int absExponent = Math.abs(exponent);
double result = PowerWithExponent(base,absExponent);
if(exponent<0){
result = 1.0/result;
}
return result;
}
public double PowerWithExponent(double base, int exponent) {
// exponent为正数
// 使用快速幂的计算方法
if(exponent == 0){
return 1.0;
}
if(exponent == 1){
return base;
}
double result = PowerWithExponent(base, exponent>>1);
result *= result;
if(exponent%2==1){
result *= base;
}
return result;
}