数值的整数次方
实现
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0。
实现
快速幂(二分)
-
baseexp = baseexp/2 * baseexp/2 = (base2)exp/2
- 当 exp 为偶数,baseexp = (base2)exp/2
- 当 exp 为奇数,baseexp = base * (base2)exp/2
-
本题思路为将幂 exp 降为 0
-
设 cur = 1,初始状态位 baseexp = baseexp * cur,在降幂之前,判断幂是否为奇数,若为奇数,将 cur 乘以一个 base。最终为:baseexp = base0 cur = cur,返回 cur。
-
若幂 exp 为负数,将其转换为整数形式再处理。
- base = 1 / base;
- exponent = -exponent;
-
为防止 exp = - exp 越界,可将 exp 的数据类型改为 long
时间复杂度:O(log2n) -----二分
空间复杂度:O(1)-----常数个额外空间
public class IntegerPowerOfValue {
// 快速幂
public double Power(double base, int exponent) {
if (base == 0) {
return 0;
}
// long a = exponent;
double cur = 1.0;
if (exponent < 0) {
base = 1 / base;
exponent = -exponent;
}
while (exponent > 0) {
if (exponent % 2 == 1) {
cur *= base;
}
base *= base;
exponent /= 2;
}
return cur;
}
}