题目描述
解题思路
简单理解快速幂🔗
快速幂也就是使用二进制和权重来表示,例如 :
那么怎么通过二进制来表示呢?
1011可以表示,此时第一位的权重为x^0,第二位的权重为x^2,第三位为x^8,所以此时
只有当二进制数为1时才有相应的权重。这也就是为什么需要通过与运算:(b & 1) == 1判断最后一位是否为1。
class Solution {
public double myPow(double x, int n) {
if (n == 0) return x;
long b = n;
double res = 1.0;
// 此时n为负数时,转化n为相反数,对应的x变为分数,此时权重也有响应的变化
if (b < 0) {
x = 1 / x;
b = -b;
}
while (b > 0) {
// 注意和1相与判断是否具有权重
if ((b & 1) == 1) {
res *= x;
}
// 此时权重需要乘自己,增大权重
x *= x;
// 向右移动一位
b >>= 1;
}
return res;
}
}