由于本题的指数是int范围,可能很大,所以需要用快速幂(Acwing-875. 快速幂 中有详细介绍快速幂,点击链接即可传送^_^)求解。https://blog.csdn.net/weixin_43844521/article/details/127553224?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127553224%22%2C%22source%22%3A%22weixin_43844521%22%7D
注意当指数是负数时,我们需要先取指数的绝对值,最后将乘积的倒数作为答案。
时间复杂度:假设指数是 n,则一共会循环 O(logn)次,所以时间复杂度是 O(logn)。
class Solution {
public:
double qmi(double a, long long k)
{
double res = 1;
while (k)
{
if (k & 1) res = res * a;
k >>= 1;
a *= a;
}
return res;
}
double Power(double base, int exponent) {
double res = 1;
long long n = (long long) exponent;
res = qmi(base, abs(n));
if (exponent < 0) res = 1 / res;
return res;
}
};