题目描述
解题思路
简单理解快速幂🔗
快速幂也就是使用二进制和权重来表示,例如 :
那么怎么通过二进制来表示呢?
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;}}
