题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
题目地址
思路
- 位运算 - 快速幂
-
示例
求 `3^20 = 9^10 = 81^5 (= 81*81^4) = 81*6561^2 = 81*43046721` 循环次数 = `bin(20)`的位数 = `len(10100)` = 5
-
时间复杂度
O(logN)
Code
class Solution {
public:
double Power(double base, int exponent) {
int p = abs(exponent);
double ret = 1.0;
while (p != 0) {
if (p & 1) // 如果是奇数
ret *= base;
base *= base;
p >>= 1;
}
return exponent < 0 ? 1 / ret : ret;
}
};