LeetCode_Pow(x, n)

Implement pow(x, n).

  

class Solution {
public:
    bool equal(double a, double b)
    {
        if(abs(a-b) < 0.0000001)
            return true;
        return false;
    }
    double powPos(double x, unsigned int n)
    {
        if( n == 0) return 1.0;
        if(n == 1) return x;
        double res = powPos(x, n>>1);
        res *= res ;
         if(n&0x01 == 1)
          res *= x;
        return res;
    }
    double pow(double x, int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(n == 0)
            return 1.0;
        if(equal(x, 0.0))
            return 0.0;
    
        bool flag = n > 0 ? false : true; // 是否是负数
        if(flag)
            n *= -1;
            
        double res = powPos(x,  n);
        
        if(flag){
            if(equal(res, 0.0))
                return 0.0;
            else 
                return 1/res;
        }else
            return res;
    }
};

 

 半分法,有个更加快的:http://blog.unieagle.net/2012/08/23/leetcode%E9%A2%98%E7%9B%AE%EF%BC%9Apowxn/

posted @ 2013-04-27 23:25  冰点猎手  阅读(156)  评论(0编辑  收藏  举报