【leetcode】50 "Pow(x, n)"


描述

求 pow(x,n)

样例

样例1

1
2
输入: -1 2147483647
输出: -1

样例2

1
2
输入: -2
输出: -2147483648

思路

二分法,需要注意处理 2147483647 和 2147483648 两个数。-2147483648 不能直接在 int 中变为正数。
不知道如何处理 double 溢出出现 inf 的问题, 1.0 / temp 可能会溢出。

代码

1
2
3
4
5
6
7
8
9
class Solution {
public:
double myPow(double x, int n) {
if(n==0){ return 1.0; }
long long nL = n > -n ? n : -n;
double temp = myPow(x*x,nL/2)* (nL&1? x:1);
return n > 0 ? temp: 1.0/temp;
}
};

参考

原题链接