给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
注意
本题要比快速幂复杂很多,底数是浮点数和是整数倒并没有区别,但指数要考虑负数情况,且本题指数并不是无符号位(无符号位可以直接通过右移1位的方式来实现除以2的功能)有符号位会出问题,所以要先变成正数,最后判别下指数正负即可
代码
public class Solution {
public double Power(double base, int exponent) {
if (exponent == 0) {
return 1;
}
if (exponent == 1) {
return base;
}
boolean sign = true;
if (exponent < 0) {
sign = false;
exponent *= -1;
}
double result1 = Power(base, exponent >>> 1);
double result2 = result1 * result1;
if ((exponent & 0x1) == 1) {
result2 *= base;
}
if (sign) {
return result2;
} else {
return 1/result2;
}
}
}
网友评论