double pow(double x, int n) {
if(n==0)
return 1;
else if(n==1)
return x;
else if(x==0)
return 0;
if(n<0){
x=1/x;
n=-n;
}
//这样写就超时了,因为执行了两次子函数
if(n%2==0)
return pow(x,n>>1)*pow(x,n>>1);
else
return x*pow(x,n>>1)*pow(x,n>>1);
double half=pow(x,n>>1);
if(n&0x1) / /&优先级低于==,n&0x1==0永远是0
return x*half*half;
else
return half*half;
}
if(n==0)
return 1;
else if(n==1)
return x;
else if(x==0)
return 0;
if(n<0){
x=1/x;
n=-n;
}
//这样写就超时了,因为执行了两次子函数
return pow(x,n>>1)*pow(x,n>>1);
else
return x*pow(x,n>>1)*pow(x,n>>1);
double half=pow(x,n>>1);
if(n&0x1) / /&优先级低于==,n&0x1==0永远是0
return x*half*half;
else
return half*half;
}