統計二進位制數中有幾個1

2021-09-13 13:52:12 字數 1000 閱讀 3842

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

下面給出四種演算法:

1.基本思路是判斷二進位制中最右邊一位是不是1;接著右移一位,此時右邊數起的第二位被移到了最右邊,再判斷是不是1;這樣每次移動一位,直到計算出所有的1。

我們知道1除最右邊一位外所有位都為0,所以我們只要讓該整數與1做與運算就好。

int getbits1(unsigned char ch)//0010 1011->4;1000 0000->1

ch >>= 1;

} return count;

}

型別用的是unsigned,我們也可以用int表示,但是上述方法用來輸入乙個負數後,我們知道右移後最高位還是1。這樣會導致出現死迴圈。

右移一位和把整數除以2在數學上是等價的,但是除法效率比移位運算要低的多,所以在實際程式設計中應盡可能地用移位運算代替乘除法。

2.為了避免死迴圈,我們可以不右移。首先和1做與運算,判斷n的最低位是不是1。接著把1左移一位得到2,再和整數n做與運算,就可以判斷次低位是不是1。直到計算出所有的1。

int number1(int n)

return count;

}

這種演算法整數中有多少個1,就要迴圈多少次。

3.把乙個整數減去1,再和原整數做與運算,會把該整數最右邊的1變為0。很多二進位制的問題都可以用這種思路解決。

int getbits2(unsigned char ch)

return count;

}

這種演算法整數中有多少個1,就進行多少次操作。

4.查表(用空間換時間)

int getbits(unsigned char ch)

; return bits[ch];

}

統計二進位制數 dp

題目描述 輸入乙個正整數m,請輸出從0到m中每乙個數字二進位制數中含有1的個數的總和,由於數值較大結果需要模100000.輸入格式 乙個m輸出格式 二進位制數中含有1的個數的總和s 輸入輸出樣例輸入2 輸出2輸入5 輸出7說明 提示 樣例說明 20 的資料 m 500 50 的資料 m 1000 7...

求二進位制數中有多少個1

演算法函式 1 int bit count one unsigned intn 2 下面我們來詳細解說如下 0x55555555的二進位制位01010101010101010101.n 0x55555555意思就是保留0,2,4,6,8.等偶數字上的1,而 n 1 0x55555555是代表保留奇數...

python二進位制數加1 二進位制中為1的位數

二進位制中為1的位數 題目要求 給定乙個整數,請計算二進位制中為1的位數 輸入 13 輸出 3 解釋 13的二進位制表示是 1101,位為1的數量是3 思路分析 如果乙個數是奇數,那麼它的二進位制的最後一位一定是1,道理很簡單,其他的位都表示2n 只有最後一位表示20 我們可以利用最後一位是否為1來...