每天一道演算法題 二進位制中1的個數

2021-08-11 08:47:41 字數 753 閱讀 4487

題目描述

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

測試用例:

0 1 2 … 10

對應輸出應該為:

0 1 1 … 2

分析:

如果乙個整數不為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,就可以進行多少次這樣的操作。

原始碼:

public

class test1

return count;

}}

執行測試:

每天一道演算法題 二進位制數中1的個數

這是我在面試時考官問我的一道演算法題,但是當時我沒有好的想法,只是用最基本的方法寫出來的,現在整理一下這道題的思路 1 不完善版 問題一 如果把右移換成 2可以嗎 不可以,因為除法的效率比移位運算的效率低 問題二 如果輸入的負數會出現什麼情況 因為是右移,負數會高位補1,最後陷入死迴圈 public...

每天一道LeeCode7 二進位制求和

二進位制求和 給定兩個二進位制字串,返回他們的和 用二進位制表示 輸入為非空字串且只包含數字1和0。示例 1 輸入 a 11 b 1 輸出 100 示例 2 輸入 a 1010 b 1011 輸出 10101 思路 1 對string短的那個補齊 前面補 0 2 將string轉換為int型別,注意...

每天一道演算法題1(StrToInt)

題目 輸入乙個表示整數的字串,把該字串轉換成整數並輸出。例如 輸入字串 345 則輸出整數345。完成函式strtoint,實現字串轉換成整數的功能。分析 首先我們分析如何完成基本功能,即如何把表示整數的字串正確地轉換成整數。還是以 345 作為例子。當我們掃瞄到字串的第乙個字元 3 時,我們不知道...