【second】pow(x,n)
注意一点:n为负数时, n = -n; 有可能会溢出,当n == INT_MIN时
double pow(double x, int n) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(equal(x,0.0)&&n<=0) //Invalid input
return 0.0;
unsigned int nn;
bool bNega = false;
if(n<0)
{
bNega = true;
nn = -n;
}else
nn = n;
double res = helper(x,nn);
if(bNega)
res = 1.0/res;
return res;
}
double helper(double x,unsigned int n)
{
if(n==0)
return 1;
if(n==1)
return x;
double res = helper(x,n>>1);
if((n&0x1)==0)
return res*res;
else
return res*res*x;
}
bool equal(double x,double y)
{
return (x-y<0.000001&&x-y>-0.000001);
}
浙公网安备 33010602011771号