递归方法
class Solution {
public:
double myPow(double x, int n) {
if(n<0) return 1.0/myPow_1(x,-n);
else return myPow_1(x,n);
}
double myPow_1(double x,int n)
{
if(n==0) return 1.0;
double y=myPow_1(x,n/2); // 不能用n>>1 T_T 不知道什么原因
if(n&1) return y*y*x;
else return y*y;
}
};
位运算
class Solution {
public:
double myPow(double x, int n) {
if(n<0){
n=-n;
x=1.0/x;
}
double ans=1;
while(n){
if(n&1) ans=ans*x;
x=x*x;
n=n/2;
}
return ans;
}
};