Pow(x, n)
Implement pow(x, n).
思路:题目不算难,但是需要考虑的情况比较多。
具体代码如下:
public class Solution {
public double myPow(double x, int n) {
boolean isMin0 = true;//结果负号
if(x > 0 || (n&1) == 0){//x>0或n为偶数
isMin0 = false;//为正
}
x = x < 0 ? -x:x;//将x统一设为正值
double d = 1.0;
if(n > 0){//n分三种情况
while(n > 0){
d = d*x;
n--;
if((Math.abs(d - 1.0) < 1e-15)){
d = 1.0;//默认等于1
break;
}else if((Math.abs(d) < 1e-15)){
d = 0;//默认等于0
break;
}
}
}else if(n == 0){
return 1;
}else{
while(n < 0){
d = d/x;
n++;
if((Math.abs(d - 1.0) < 1e-15)){
d = 1;
break;
}else if((Math.abs(d) < 1e-15)){
if(isMin0){//除数等于0,将等于正负无穷
return Double.MIN_VALUE;
}else{
return Double.MAX_VALUE;
}
}
}
}
return isMin0?-d:d;
}
}