Implement pow(x, n).
第一个版本:
double pow(double x, int n)
{
if(n==0)
return 1.0;
if(n<0)
return 1.0/pow(x,-n);
return x*pow(x,n-1);
}
超时
第二个版本:
class Solution {
public:
double pow(double x, int n)
{
if(n==0) return 1.0;
if(n>0)
{
if(n%2==0)
return pow(x, n/2) * pow(x, n/2);
else
return pow(x, n-1) * x;
}
return 1.0/pow(x, -n);
}
};
Last executed input: 0.00001, 2147483647
超时
错了快几十次, 不得不说, 自己考虑太次
参考大家的:
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;
}
};