Pow(x, n)
Implement pow(x, n).
计算x^n,普通解法会超时,考虑二分求解,将n次计算乘积的过程二分优化,避免超时。
n为偶数时,如2,4,6。。。考虑x^n==(x^(n/2))*(x^(n/2)),用这种方法可以现将x^2的结果保存下来,再使n=n/2,即可达到二分降低计算次数的过程,如果n为奇数,则直接计算乘积的结果。
代码如下:
class Solution {
public:
double myPow(double x, int n) {
//判断n是否为负数
if(n<0)
{
x=1/x;
n=-1*n;
}
double result=1;
/*判断n的奇偶,奇数存结果,偶数降低次幂,底数翻倍*/
while(n>0)
{
n&1?result*=x:n=n;
n>>=1;
x*=x;
}
return result;
}
};