Pow(x, n)
Implement pow(x, n).
题目:实现求幂函数。分析:基本算法比较简单,递归二分,5^4 = 5^2 * 5^2 主要在于对一些特殊情况的处理:
- x为0,double判断是否为0不能直接用==
- n为负数,有除法
- n=INT_MIN的时候,转换成正数会超出int范围
代码:
class Solution {
public:
double pow(double x, int n) {
if(abs(x-0)<0.000001 && n<=0) return 0;//0^0 0^(-n)
if(n==0) return 1.0;
if(n==1) return x;
if(abs(x-1)<0.000001) return 1.0;
long long t;
t=(long long)(n);
t=abs(t);
double ans=powAbove0(x,t);
if(n<0) return 1.0/ans;
else return ans;
}
double powAbove0(double x, long long n){ //n>0 long long
if(n==1) return x;
double t=powAbove0(x,n>>1);
double res=t*t;//powAbove0(x,n>>1)节省一次计算
if(n&1==1) res=res*x;
return res;
}
};