思路:
指数为3种情况:正数,负数,0;负指数直接对正指数的结果求倒即可,指数为0,结果为1;
特殊情况:负数的0次幂,此时异常(返回-1,或者抛异常)
注意点:浮点数的比较方法;位运算的应用;
public class Solution {
public double Power(double base, int exponent) {
if(equalDouble(base,0.0) && exponent < 0)
return -1.0;
int tmpExponent = exponent;
if(exponent < 0)
tmpExponent = -exponent;
double result = powerWithPositivExponent(base, tmpExponent);
if(exponent < 0)
result = 1.0 / result;
return result;
}
private double powerWithPositivExponent(double base, int exponent){
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
double result = powerWithPositivExponent(base,exponent>>1);
result *= result;
if((exponent & 1) == 1){//位运算判断奇偶性
result *= base;
}
return result;
}
private boolean equalDouble(double d1, double d2){
if((d1 - d2) < 0.0000001 && (d1 - d2) > -0.0000001)
return true;
else
return false;
}
}