看这道题,以为很简单,重复乘以x,n<0,就1/result,再加上对一些特殊情况的判定,例如x=0,1,n=0,1。但是可恶啊超时,有一个用例特别大,x=2,n=负的一个巨大的数,结果应该为0。
一点开参考代码。。。(这不是在戏弄我)
采用迭代
class Solution {
public:
double myPow(double x, int n) {
double result=1.0;
long long N=abs((long long)(n));
while(N)
{
// result*=x;
// i++;
if(N&1) result*=x;//取最后一位
x*=x;
N>>=1;//移除最后一位
}
if(n>0) return double(result);
else return double(1/result);
}
};
class Solution {
public:
double myPow(double x, int n) {
double result=1.0;
long long N=(long long)n;
for(int i=N;i!=0;i/=2)//n可以是负数,所以这里n不能写>0,所以i!=0
{
if(i%2!=0) result*=x;
x*=x;
}
if(n<0) result=1/result;
return result;
}
};