题目链接:https://leetcode-cn.com/problems/powx-n/
题目如下:
解一:迭代
class Solution {
public:
double myPow(double x, int n) {
double result=1.0;
long long exp=abs((long long)(n));//令其取最大类型,并为绝对值
while(exp){
if(exp&1) result*=x;//取最后一位
x*=x;
exp>>=1;//移除最后一位
}
if(n<0) result=1/result;
return result;
}
};
解二:递归
class Solution {
public:
//注:
//n为奇:x^n=x^(n/2)*x^(n/2)*x
//n为偶:x^n=x^(n/2)*x^(x/2)
double myPow(double x, int n) {
long long N=n;
if(N>=0) return rPow(x,N);
else return 1.0/(rPow(x,-N));
}
double rPow(double x,long long n){
if(n==0) return 1;
double half=rPow(x,n/2);
if(n%2==0) return half*half;
else return half*half*x;
}
};