50. Pow(x, n)¶
难度:中等
题目¶
实现 pow(x, n),即计算 x 的 n 次幂函数。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
输入: 2.10000, 3
输出: 9.26100
输入: 2.00000, -2
输出: 0.25000
解释: 2^(-2) = (1/2)^2 = 1/4 = 0.25
- -100.0 < x < 100.0
- n 是 32 位有符号整数,其数值范围是\([−2^{31}, 2^{31} − 1]\)。
题解¶
基本思路: 利用快速幂的思路,存储次数为2的整数幂的计算结果,然后用这些结果相乘得到输出结果。注意指数为负数的情况。当指数为-2147483648
时不能取负,此时可以先加一再取负,最后除以底数。
代码如下:
double myPow(double x, int n)
{
if (n < 0)
return 1 / myPow(x, -(n + 1)) / x;
double cache[32] = {0}, ret = 1;
int i = 0;
cache[0] = x;
while (n)
{
if (n & 1)
ret *= cache[i];
n >>= 1;
i++;
cache[i] = cache[i - 1] * cache[i - 1];
}
return ret;
}