题目:
Implement pow(x, n), which calculates x raised to the power n (xn).
Example 1:
Input: 2.00000, 10 Output: 1024.00000
Example 2:
Input: 2.10000, 3 Output: 9.26100
Example 3:
Input: 2.00000, -2 Output: 0.25000 Explanation: 2-2 = 1/22 = 1/4 = 0.25
分析:x的正负和n的奇偶决定了结果的正负,n的正负决定了是否取倒数。
并且分情况递归来提高效率:(1)3的10次方=(3*3)的5次方
(2)3的9次方=3*(3的8次方)
代码:
class Solution {
public:
double myPower(double x,long n){
if(n==0) return 1.0;
else if(n%2==0) return myPower(x*x,n/2);
else return x*myPower(x,n-1);
}
double myPow(double x, int n) {
bool flag1=false;
bool flag2=false;
bool flag3=false;
if(x<0) flag1=true;
if(n<0) flag2=true;
if(n%2!=0) flag3=true;
double t=abs(x);
long y=abs((long)n);
t=myPower(t,y);
if(flag1&&flag3)
t=-t;
if(flag2)
t=1/t;
return t;
}
};