統計二進位制數 dp

2021-10-22 04:38:15 字數 1181 閱讀 6213

題目描述

輸入乙個正整數m,請輸出從0到m中每乙個數字二進位制數中含有1的個數的總和,由於數值較大結果需要模100000.

輸入格式

乙個m輸出格式

二進位制數中含有1的個數的總和s

輸入輸出樣例輸入2

輸出2輸入5

輸出7說明/提示

樣例說明

20%的資料 m<=500

50%的資料 m<=1000

70%的資料 m<=50000000

100%的資料 m<=100000000

記憶體限制500mb

知識點:

統計kk這個數在二進位制的表示下有幾個1,**如下:

#include

using

namespace std;

intmain()

cout

}

解題思路:

這種解法,有幾個1就執行幾次。

把乙個整數減去1,再與原數字做按位與運算,會把原數二級制位中最右邊的1變成0.那麼乙個整數二進位制表示中有幾個1,就可以進行幾次這樣的操作。

0111減去1變成0110,二者進行與運算變成0110,則把原數做右邊的1變成0.迴圈往復直到全為0結束。

**如下:

#include

using

namespace std;

intmain()

count = count %

100000;}

cout << count << endl;

return0;

}

但是我們會發現,上面的**在運算過程,會進行很多重複運算,我們明明可以對這些數字進行記憶化,在運算過程中,之前算過的數,我們就不要算了,所以我們可以用dp

**如下:

#include

using

namespace std;

const

int n =

100000010

;const

int mod =

100000

;int dp[n]

;int

main()

cout << sum << endl;

return0;

}

1318 非法二進位制數(dp)

如果乙個二進位制數包含連續的兩個1,我們就稱這個二進位制數是非法的。小hi想知道在所有 n 位二進位制數 一共有2n 個 中,非法二進位制數有多少個。例如對於 n 3,有 011,110,111 三個非法二進位制數。由於結果可能很大,你只需要輸出模109 7的餘數。乙個整數 n 1 n 100 n ...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

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

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位製表中1的個數。例如,把9表示成二進位制是1001,有兩位是1,因此,如果輸入9,則該函式輸出2。下面給出四種演算法 1.基本思路是判斷二進位制中最右邊一位是不是1 接著右移一位,此時右邊數起的第二位被移到了最右邊,再判斷是不是1 這樣每次移動一位,...