题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
解答
快速幂算法
public class Solution {
public double Power(double base, int exponent) {
if (exponent == 0)
return 1.0;
if (Math.abs(base) < 0.0000001) { //判断base是否等于0
if (exponent < 0) {
throw new RuntimeException();
} else {
return 0.0;
}
}
int e = Math.abs(exponent); //不管幂的正负,给e一个正数
double temp = 1.0;
while (e != 0) {
temp = (e & 1) != 0 ? temp * base : temp;
//如果当前次幂的最后一位(二进制数)不为0,将当前权重加入答案
base *= base; //权重增加
e = e >> 1; //二进制右移一位
}
return exponent > 0 ? temp : 1 / temp; //判断幂的正负
}
}