題目:求解m的n次方
使用位運算進行處理:
將n拆解爲每一位,只處理當前位爲1的情況。
例如:n爲13,二進制表示成1101,可以拆解成1000 + 0100 + 0000 + 0001
需要過濾當前位爲0的情況,可以使用& 1的方式進行過濾。
代碼:
public int getMultiplier(int m, int n) {
int sum = 1;
int tmp = m;
//對n進行移位,直到n的當前值爲0
while (n != 0) {
//通過與0001相與得到最後一位,判斷最後一位的值是否爲1
if ((n & 1) == 1) {
sum = sum * tmp;
}
n = n >> 1;
//tmp不斷相乘,相當於給每一位進行加權(8,4,2,1)
tmp *= tmp;
}
return sum;
}
底數m爲2的時候直接進行移位就可以,但是很多時候底數m不爲2,這個時候需要從指數n的角度進行考慮。