快速幂
这里的n必须要化为long型,
Java 代码中 int32 变量 n \in [-2147483648, 2147483647]n∈[−2147483648,2147483647] ,因此当 n = -2147483648n=−2147483648 时执行 n = -nn=−n 会因越界而赋值出错。解决方法是先将 nn 存入 long 变量 bb ,后面用 bb 操作即可。
class Solution {
public double myPow(double x, int n) {
if(x==0){
return 0;//x等于0直接返回
}
long b=n;
double res=1.0;
if(b<0){//如果b<0,x取倒数,b取反
x=1/x;
b=-b;
}
while(b>0){
if((b&1)==1)//b是奇数或者b最后为1了,直接乘以x
res*=x;
x*=x;//为偶数,x²
b>>=1;//b每次除2
}
return res;
}
}
不化为long型,有个案例过不了