leetcode-50-Pow(x, n)

来源:互联网 发布:淘宝店铺布局图片多大 编辑:程序博客网 时间:2024/05/20 04:12

问题

题目:[leetcode-50]

思路

这个题目比我在牛客刷的要更好。
主要是多了一种情形是对于,INT_MIN的考虑。
如果把它转化为整数次方是0。
因为他的二进制形式是:[10000000000000000000000000000000]
所以,要增加对它的处理。

代码

class Solution {public:    double myPow(double x, int n) {        if( equal(x, 0.0) ){            if(n>0) return 0.0;            else if(!n) return 1.0;            else return -1.0;        }        else{            if(!n) return 1.0;            else if(1==n) return x;            else{                double res = 0.0;                if(n>0){                    double half = myPow(x, n/2);                    res = half * half;                    if(n%2) res *= x;                }                else{                    unsigned int e = 0;                    if(n == INT_MIN){                        e = (unsigned)(INT_MAX) + 1;                    }                    else                        e = -n;                    double half = myPow(x, e/2);                    res = half*half;                    if(e%2) res *= x;                    res = 1.0/res;                }                return res;            }        }    }private:    bool equal(double a, double b){        const static double eps = 1e-8;        return fabs(a-b) < eps;    }};

思路1

代码1

class Solution {public:    double myPow(double x, int n) {        if( is_zero(x) ){            return (!n)?1.0:0.0;            }        else{            if(!n) return 1.0;            int b = abs(n);            double res = 1;            double w = x;            while(b){                if(b%2) res *= w;                b/=2;                w *= w;            }            return (n>0)?res:1.0/res;        }    }private:    bool is_zero(double val){        const static double eps = 1e-8;        return fabs( val - 0.0 ) < eps;    }};
0 0
原创粉丝点击