题目描述
代码:
class Solution {
public:
double myPow(double x, int n) {
double res=1;
long b = n;//不加这个,下面b取反后就有可能会越界
if(n==0||x==1){
res=1;
}
else if(n>0){
res=quick(x,n);
}
else if(n<0){
b=-b;
res=(1.0/quick(x,b));
}
return res;
};
//快速幂算法
double quick(double x,long n){//这个n要弄成long,这样在测试指数为-2147483648(int的下限)这个的时候,但是取反的之后这个正数int补码是取不到的,所以这里要用long来扩大范围。
double res2=1.0;
while(n>0){
if((n&1) != 0){
res2*=x;
}
x*=x;//就是指数化为二进制后的操作
n>>=1;
}
return res2;
}
};