題意:
給兩個數a b,問二進位制情況下從a一直加1 直到b需要進多少位。
輸入:
1 21 31 4
1 6
輸出:
0236
分析:
二進位制只是由1和0組成,二進位制下的各數都有規律可循。
9 8 7 6 5 4 3 2 10 0 0 0 0 0 0 0 0
(0)0 0 0 0 0 0 0 0 1
(1)0 0 0 0 0 0 0 1 0
(2)0 0 0 0 0 0 0 1 1
(3)0 0 0 0 0 0 1 0 0
(4)0 0 0 0 0 0 1 0 1
(5)0 0 0 0
0 0 1 1 0
(6)0 0 0 0 0 0 1 1 1
(7)0 0 0 0 0 1 0 0 0
(8): : :::::::
: : : : : : :
:就這樣會發現規律:
就是第一
豎行就是1和0交替出現,
第二豎行是00 11交替出
現,第三豎行是0000 1111交替
出現等等
計算1的個數,然後求需要進製的值....
拆成二進位制來看的話,考慮第一位,假設從1~b有x1個數的第一位是1,從1~a-1有x2個數的第一位是1,那麼從a~b就有(x1-x2)個數第一位是1,那麼在第一位需要進製的次數就為(x1-x2)/2。假設從a~b有x3個數第二位是1,那麼在第二位需要進製的次數就為((x1-x2)/2 + x3)/2。以此類推。
**:
#include using namespace std ;
int main()
long long num=0;
for(int i=0; i<70; i++)
printf("%i64d\n",num);
}return 0;
}
二進位制加法運算
兩個二進位制整數相加時,是位對位處理的,從最低的一對位 右邊 開始,依序將每一對位進行加法運算。兩個二進位制數字相加,有四種結果,如下所示 0 0 0 0 1 1 1 0 1 1 1 10 1 與 1 相加的結果是二進位制的 10 等於十進位制的 2 多出來的數字向更高位產生乙個進製。如下圖所示,兩...
二進位制加法運算
兩個二進位制整數相加時,是位對位處理的,從最低的一對位 右邊 開始,依序將每一對位進行加法運算。兩個二進位制數字相加,有四種結果,如下所示 0 0 0 0 1 1 1 0 1 1 1 10 1 與 1 相加的結果是二進位制的 10 等於十進位制的 2 多出來的數字向更高位產生乙個進製。如下圖所示,兩...
操作二進位制寫入二進
操作二進位制 寫入二進位制 1 宣告變數 sqlite3 stmt stat 2 把sql語句解析到stat結構中去 sqlite3 prepare 3 繫結替換 sqlite3 bind blob 4 儲存到資料庫 int result sqlite3 step 5 釋放stat結構 sqlite...