class Solution {
public:
double myPow(double x, int n) {
if(x==0)
return 0.0;
long p=n;
//由于int范围为-2^31~2^31-1,最小值取反后超过int范围(否则直接负数幂不好求),所以用long
double ans=1.0;
if(n<0){
p=-p; //不能p=-n ,最小值取反后超过int范围
x=1/x;
}
while(p>0){
if(p & 1==1){
ans=ans*x;
}
x=x*x;
p>>=1;
}
return ans;
}
};
注意:
1,long类型的长度和编译系统位数有关,可以通过sizeof(变量)去看,在leetcode上long为8byte长度,int为4byte,所以这题将 -2^32赋值给long变量是不会越界的。
2,