Implement pow(x, n).
没有考虑INT_MIN 和 INT_MAX导致错了两次
贴上挫挫的代码
class Solution {
public:
double pow(double x, int n) {
if (x<0.0000001 && x>-0.000001 && n<0)
return x;//it should be false;
else if (x<0.0000001 && x>-0.000001)
return x;
else if(n==0)
return 1;
else if(x>-1.000001 && x<-0.999999)
{
if(n&1)
return x;
return -x;
}
else if(x>0.999999 && x<1.000001)
return x;
int temp_n = n>0?n:-n;
double result = pow_binary(x, temp_n);
return n>0?result:(1/result);
}
private:
double pow_binary(double x, int n)
{
if(n==1)
return x;
else if(n==0)
return 1;
double result = pow_binary(x,n>>1);
result = result*result;
if(n&1)
result = result*x;
return result;
}
};
class Solution {
public:
double pow(double x, int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(n<0)
{
if(n==INT_MIN)
return 1.0 / (pow(x,INT_MAX)*x);
else
return 1.0 / pow(x,-n);
}
if(n==0)
return 1.0;
double ans = 1.0 ;
for(;n>0; x *= x, n>>=1)
{
if(n&1>0)
ans *= x;
}
return ans;
}
};