您的位置:首页 > 其它

LeetCode之Pow(x, n)

2015-09-02 17:13 232 查看
/*直接模仿数学中的乘幂算法。*/
class Solution {
public:
double myPow(double x, int n) {
if(n == 0) return 1.0;
else if(fabs(x) < 1e-10) return 0.0;
else{
if(n > 0){
if(x > 0.0) return myPowPositive(x, n);
else{
if((n & 1) == 0) return myPowPositive(-x, n);//n为偶数
else return -myPowPositive(-x, n);//n为奇数
}
}
else{
if(x > 0.0) return 1.0 / myPowPositive(x, -n);
else{
if((n & 1) == 0) return 1.0 / myPowPositive(-x, -n);
else return -1.0 / myPowPositive(-x, -n);
}
}
}
}

double myPowPositive(double x, int n){
double res(1.0);
double eps = 1e-10;
for(int i = 0; i < n; ++i){
if(fabs(res * x - res) < eps) return res;
res *= x;
}
return res;
}
};

/*采用二分法加速。*/
class Solution {
public:
double myPow(double x, int n) {
if(n < 0) return 1.0 / myPow_sub(x, -n);
else return myPow_sub(x, n);
}

double myPow_sub(double x, int n){
if(n == 0) return 1.0;
double tmp = myPow_sub(x, n/2);
if((n & 1) == 0) return tmp * tmp;
else return tmp * tmp * x;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: