具体思路:
详见thinking专栏里;
具体代码:
1.二分思想:
class Solution {
public:
double myPow(double x,int n){
if(n==0)
return 1;
if(x==1.0)
return x;
if(n<0){
return 1/Pow(x,abs(n));
}else{
return Pow(x,n);
}
}
double Pow(double x, long long n) {
if(n==1)
return x;
if(n%2==1)
return x*Pow(x, n-1);
else{
double temp=Pow(x, n/2);
return temp*temp;
}
}
};
2.位运算思想:
using ll=long long;
class Solution {
public:
double myPow(double x,int n){
ll N=n;
N=abs(N);
double ret=1;
double temp=x;
while(N!=0){
if(N&1){
ret*=temp;
}
temp*=temp;
N>>=1;
}
if(n<0)
return 1/ret;
return ret;
}
};