快速幂。思路就是增大底数减少循环次数。下面用^表示指数运算,讨论a^b非负指数情况。
当b为偶数时,a^b=(a^2)^(b/2)
当b为奇数时,a^b=a(a^2)^(b/2)
程序实现时,奇偶判断可以用位与运算,除2可以用位移运算,负指数转化成正指数。 如果用递归实现看起来会更直观,下面用循环实现。
class Solution {
public:
double Power(double base, int exponent) {
int tag = 0;
if (exponent < 1)
{
exponent *= -1;
tag = 1;
}
double ret = 1;
while (exponent)
{
if (exponent & 1)
{
ret *= base;
}
base *= base;
exponent >>= 1;
}
if (tag)
{
ret = 1 / ret;
}
return ret;
}
};