数值的整数次等
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
最简单的方法当然是循环累乘,时间复杂度O(n)。
这里使用快速幂等法(不了解可点击查阅)。现在的问题就变成如何逐位读取指数的二进制表达式。
- 可以使用
&
和>>
public double Power(double base, int exponent) {
double res = 1, curr = base;
int n = exponent;
if (exponent < 0) {
if (base == 0)
throw new RuntimeException("分母为0");
exponent = -exponent;
}
while (exponent != 0) {
// 如果最后一位为1,乘上这一位的结果
if ((exponent & 1) == 1)
res = res * curr;
curr *= curr;
exponent >>= 1;
}
return n >= 0 ? res : (1 / res);
}