Pow(x, n)_LeetCode
Description:
Implement pow(x, n).
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; } } };
-