/**
* 数值的整数次方:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/
* @Description
*/
public class Test14 {
boolean isInvalid = false;
public double myPow(double x, int n) {
isInvalid = false;
double result;
if (n > 0){
result = powerCore(x,n);
} else if (n < 0) {
if (x == 0) {
isInvalid = true; //0的负数次方不存在
return 0;
}
//x != 0
result = 1 / powerCore(x, -n);
} else {
return 1; //这里0的0次方输出为1
}
return result;
}
private double powerCore(double x, int n) {
if (n == 1){
return x;
}
if (n == 0){
return 1;
}
double result = powerCore(x,n >> 1);
result *= result;
if ((n & 1) == 1){
result *= x;
}
return result;
}
//快速幂方法
public double myPow2(double x, int n) {
if(x == 0) return 0;
long b = n;
double res = 1.0;
if(b < 0) {
x = 1 / x;
b = -b;
}
while(b > 0) {
if((b & 1) == 1) res *= x;
x *= x;
b >>= 1;
}
return res;
}
public static void main(String[] args) {
System.out.println(new Test14().myPow2(5, -4));
}
}
剑指Offer-13-数值的整数次方
最新推荐文章于 2021-07-14 21:10:18 发布