面試題15 二進位制中1的個數

2022-06-01 19:24:09 字數 683 閱讀 2861

// 面試題15:二進位制中1的個數

// 題目:請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如

// 把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。

1)常規思路:

首先考慮位與運算,每次都讓目標數字和1做位與運算,然後將目標數字右移一位,

多少次結果為1,目標數字轉化為二進位制後就有多少個1.

但是這樣做的話,忽略了負數的情況,負數右移後,高位補1,我們寫的函式就會變成死迴圈。

所以需要進行一些改進,目標數字不變,對n從1不斷向右移。

我們可以提高演算法的效率,目標數字轉化為二進位制有多少個1就迴圈幾次。

乙個二進位制數字n,如果不為0,那麼它至少有一位是1。

如果右起第1位為1,n-1高位不變,最後一位變為0,(n-1)&n就會消除掉乙個1.

如果右起第1位不為1,右起第乙個1位於第m位,n-1第m位變為0,m-1到第1位都變為1,

那麼(n-1)&n仍然消除掉乙個1.

重複這個過程,直到n被消除為0,比第一種方法少了迴圈次數,效率也會提高。

int numberof1_solution1(int n)

return count;

}int numberof1_solution2(int n)

return count;

}

面試題15 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。includeusing namespace std int numof1 int n flag flag 1 return count int main ...

面試題15 二進位制中1的個數

請實現乙個函式,輸入乙個整數,輸出該整數的二進位制表示中1的個數。例如,把9表示成二進位制是1001,有2個是1。因此,如果輸入9,則該哈數輸出2。如果輸入負數,則統計該數字二進位制補碼中的1的個數。先判斷二進位制中最右邊一位是不是1 接著把輸入的整數右移一位,此時原來處於從右邊數起第二位被移到最右...

面試題15 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出改數的二進位制表示中1的個數 常規解法 思路 通過與運算來判斷某乙個是否為1。該數先和1相與,如果結果為1,則第一位為1,然後1左移一位與該數相與,判斷第二位是否為1 以此類推,即可判斷該數的二進位制中有多少個1。int getnumofoneinbinary...