[解題技巧]m的n次方

題目:求解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的角度進行考慮。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章