题目地址:
https://www.acwing.com/problem/content/26/
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。只要输出结果与答案的绝对误差不超过 1 0 − 2 10^{−2} 10−2即视为正确。
注意:
不会出现底数和指数同为
0
0
0的情况。当底数为
0
0
0时,指数一定为正。底数的绝对值不超过
10
10
10,指数的绝对值不超过
1
0
9
10^9
109。
快速幂。代码如下:
class Solution {
public:
double Power(double base, int exponent) {
long k = exponent;
if (k < 0) base = 1.0 / base, k *= -1;
double res = 1.0;
while (k) {
if (k & 1) res *= base;
base *= base;
k >>= 1;
}
return res;
}
};
时间复杂度 O ( log k ) O(\log k) O(logk), k k k是幂次的绝对值,空间 O ( 1 ) O(1) O(1)。