劍指offer 面試題10 二進位制中 1 的個數

2021-07-30 06:01:22 字數 1168 閱讀 5605

題目:請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如把 9 表示成二進位制是 1001;有 2 位是 1,因此如果輸入 9,函式輸出 2.

這個題本來我的思路是模擬十進位制的規則,設定乙個計數變數count,初始值為0。然後用給的整數數和2進行取餘操作,結果只有兩種可能:0或1,如果結果是1,計數變數+1;如果是0,不操作。然後num /= 2(二進位制右移一位,和十進位制中數/=10後所有數右移一位的操作類似)。不斷迴圈,直到這個數的值小於1,返回計數變數的值就能求出來。但是看了網上的乙個利用二進位制數『&』操作性質的方法,也能得出正確答案,而且經過試驗,速度比上面的思路執行更快,所以我們選擇這種方法。不多說,看**:

package swordoffer;

/** * 劍指offer第10題

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

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

* *@author someone

* */

public

class

ex10numof1inbinary2

public

intnumberof1(long n)

return count;

}}

**十分簡潔,而且效率很高。

下面是第乙個思路的**,相比簡潔度和效率都差很多。

package swordoffer;

/** * 劍指offer第10題

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

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

* *@author stephen huge

* */

public

class

ex10numof1inbinary

public

intnumof1inbinary(long num)

int count = 0;

if(num % 2 == 0)

while(num >= 1)

num /= 2;

}return count;

}}

劍指Offer 面試題10 二進位制中1的個數

請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1.因此如果輸入9,該函式輸出2.注意 整數和負數以及0的區別,這是由儲存機制決定的。分析 將輸入的整數依次右移並與1相位與!源 如下 includeusing std cout using st...

劍指offer面試題10 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出該二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1,因此如果輸入9,該函式輸出2。常規的解題思路 可以把n和1做與運算,如果結果為1,那麼n的最後一位為1,否則為0,然後n右移1位,再和1做與運算,直到判斷完n的所有位。int statis...

《劍指offer》(面試題10) 二進位制中1的個數

位運算 位運算是把數字用二進位制表示之後,對每一位上 0 或者 1 的運算。因為位運算總共只有五種運算 與,或,異或,左移和右移 與 0 0 0 1 0 0 0 1 0 1 1 1 或 0 0 0 1 0 1 0 1 1 1 1 1 異或 0 0 0 1 0 1 0 1 1 1 1 0 左移運算子 ...