Implement pow(x, n).
刚开始想都没想就写了个循环:
class Solution {
public:
double myPow(double x, int n) {
double ans = 1.0;
for (int i = 0; i < abs(n); i++) {
ans *= x;
}
if (n < 0) {
ans = 1.0 / ans;
}
return ans;
}
};
结果又是超时……
其实比较好的方法是使用递归,若n是偶数,pow(x, n) = pow(x * x, n/2);若n是奇数,pow(x, n) = x * pow(x * x, n/2).
还要注意当n=MIN_INT时要特殊处理一下,因为MIN _ INT=-2147483648,MAX_INT=2147483647,如果不特殊处理,在n = -n这步会造成溢出。
class Solution {
public:
double myPow(double x, int n) {
if (x == 0) return 0;
if (n == 0) return 1;
if (n < 0) {
if (n == INT_MIN) {
n++;
return x*myPow(1/x, -n);
}
n = -n;
x = 1 / x;
}
return (n % 2 == 0) ? myPow(x*x, n/2) : x*myPow(x*x, n/2);
}
};