牛客刷題之二進位制中1的個數

2021-10-09 19:43:22 字數 813 閱讀 5962

輸入乙個整數,輸出該數32位二進位制表示中1的個數。其中負數用補碼表示。

採用兩種方法:

第一種,為了避免死迴圈,我們可以不右移輸入的數字i:(1)首先把i和1做與運算,判斷i的最低位是不是為1。(2)接著把1左移一位得到2,再和i做與運算,就能判斷i的次低位是不是1。(3)這樣反覆左移,每次都能判斷i的其中一位是不是1。

第二種,如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1(如果最右邊的1後面還有0的話)。其餘所有位將不會受到影響。舉個例子:乙個二進位制數1100,從右邊數起第三位是處於最右邊的乙個1。減去1後,第三位變成0,它後面的兩位0變成了1,而前面的1保持不變,因此得到的結果是1011.我們發現減1的結果是把最右邊的乙個1開始的所有位都取反了。這個時候如果我們再把原來的整數和減去1之後的結果做與運算,從原來整數最右邊乙個1那一位開始所有位都會變成0。如1100&1011=1000.也就是說,把乙個整數減去1,再和原整數做與運算,會把該整數最右邊乙個1變成0.那麼乙個整數的二進位制有多少個1,就可以進行多少次這樣的操作。

**一:

class

solution

return count;}}

;

**二:

class

solution

return count;}}

;

注意:

補碼原碼

牛客刷題之二進位制中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。解題思路 按照常規想法,如果是正數,則直接轉換為二進位制求1的個數即可。如果是負數,先轉換為正數,然後取反加1。public class solution n n 2 return count else 求其二進位制表示 for in...

演算法刷題 二進位制中1的個數

問題 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。思路 將數字轉化為二進位制之後,轉化為字串陣列形式,再迴圈遍歷陣列,找出 1 的個數。解釋 這是最low的方法我認為,十進位制轉化為二進位制可以通過自己程式設計邏輯實現,也可以用自帶的庫實現,integer.tobinaryst...

刷題 二進位制中1的個數 python

題目 輸入乙個整數,輸出該數32位二進位制表示中1的個數。其中負數用補碼表示。思路 一種是直接求補碼,然後統計1的個數 另一種是通過n n 1 每次消除最低位的1,直至消除至0,所需要的消除次數即為1的位數。code 第一種 coding utf 8 class solution def buma ...