原题:Implement pow(x, n);
思路:求幂次采用递归的方法;myPow( x , n )=myPow( x , n/2 ) * myPow( x , n/2 );
考虑奇数次幂和偶数次幂相差一次;
考虑负数次幂等于正数次幂的倒数;
之后去除特殊情况:
1. 幂次是Integer.MIN_VALUE不能直接取负;
2. 除数不能为0;
3. 幂次最大值不能超过Double.MAX_VALUE;
代码:
public class Solution {
public double myPow(double x, int n) {
if(n<0){
double tmp=1;
if(n==Integer.MIN_VALUE){ //去除幂次是Integer.MIN_VALUE的情况;
tmp=x;
n=n+1;
}
n=-n;
double res=tmp*myPow(x,n); //计算x^n;
if(res==0.0){ //去除 除数等于0的情况;
return 0.0;
}else{
return 1/res;
}
}else if(n==0){
return 1.0;
}else{
double half=myPow(x,n/2);
double res=half*half;
res=res>=Double.MAX_VALUE?0.0:res;
if(n%2==0){
return res;
}else{
return res*x;
}
}
}
}