Implement pow(x, n).
/*二分法,复杂度为O(lgn)。
注意点:1.n为正数,负数,0;2.INT_MIN的相反数不是INT_MAX
*/
class Solution {
public:
double pow(double x, int n) {
if (n == 0)
return 1.0;
if (n < 0) {
if (n == INT_MIN)
return 1.0 / (pow(x, INT_MAX)*x);
else
return 1.0 / pow(x, -n);
}
double tmp = pow(x, n >> 1);
if (n % 2 == 0)
return tmp*tmp;
else
return tmp*tmp*x;
}
};