Pow(x, n)_LeetCode

Description:

Implement pow(xn).

 

Example 1:

Input: 2.00000, 10
Output: 1024.00000

 

Example 2:

Input: 2.10000, 3
Output: 9.26100

解法一:
投机取巧法,代码如下:
class Solution {
public:
    double myPow(double x, int n) {
        double a = x;
        double result = pow(a,n);
        return result;
    }
};

 

解法二:

一开始用迭代法实现,一直超时,我真的要疯了- -,优化了很久。

INT_MAX = 2147483647而INT_MIN = -2147483648。所以,x的INT_MIN次幂等于x的(INT_MAX + 1)次幂的倒数。

class Solution {
public:
    double myPow(double x, int n) {
        if (n == 0) {
            return 1.0;
        } else if (n < 0) {
            if (n == INT_MIN) {
                return 1.0/myPow(x,INT_MAX)*x;
            } else {
                return 1.0/myPow(x,-n);
            }
        } else {
            double base = 1.0;
            while (n > 0) {
                if(n & 1 == 1) { //判断此时n转换成二进制后最右是否为1
                    base *= x;
                }
                x *= x;
                n = n >> 1;
            }
            return base;
        }
    }
}; 

 

posted @ 2017-12-05 20:10  SYSU_Bango  阅读(153)  评论(0)    收藏  举报