整理原因:
学习分治算法时发现很好用,可解决幂乘复杂度过高的情况,将原有O(n)转为O(logn)。
步骤总结
(判断==> 进位 ==>右移 )不停重复循环直到指数二进制移到最高位
参照来源
https://www.cnblogs.com/CXCXCXC/p/4641812.html
所用到的符号& 和 >>
常用的二进制取位操作:
①&按位与:a&b是把a和b都转换成二进制数然后再进行与的运算;在二进制中用&1可得到该数二进制情况下末尾数值,如13的二进制为1101,则13&1为1。
②>>右移:二进制去掉最后一位。
代码
int poww(int a, int b) {//a为底数,b为指数
int ans = 1, base = a;
while (b != 0) {
if (b & 1 != 0)//b末位为奇数则此时base乘进ans
ans *= base;
base *= base;//base不断进位
b >>= 1;//b右移
}
return ans;
}