ac**如下:
#include
#include
using namespace std;
intmain()
你沒有看錯,就是這麼簡單,就是這麼酸爽,上個月寫的70行**記憶猶新…
先聊聊二進位制吧
總所周知,計算機的記錄方式是二進位制記錄,即計算機的世界是0和1的世界。但我們現實生活卻屬於十進位制的世界,那麼如何將十進位制轉化為二進位制呢?
實現**如下:
#include
#include
#include
using namespace std;
int s[
100]
;int
main()
for(
int j=i;j>=
0;j--
) cout<<<
' ';
cout
}
如果單看這段**實際上是比較抽象的,但當你了解如何將二進位制轉化為十進位制就懂了!
比如說:
5=101=((1*2)+0)*2+1
那麼在十進位制轉二進位制中:
過程一:
5%2=1 這個1 就相當於上面式子的最後乙個1。
5-1=4
4/2=2
過程二:
2%2=0 這個0就相當於括號內的那個0。
2-0=2
2/2=1
過程三:
1%2=1 這個1相當於開始的那個1。
1/2=0 結束迴圈。
所以5的二進位制是101
二進值轉十進值**如下:
#include
#include
#include
#include
using namespace std;
intmain()
cout
}
在聊完二進位制後再聊聊 unsigned
以前總是可以看到一些大佬的**裡有 unsigned int ans 這個定義,一開始我還是不太了解為什麼要定義乙個unsigned,直接int不好嗎,但學了位運算後明白的徹底。
首先必須知道 int的有效位數是32位,long long的位數是64位。
32位的意義是用二進位制儲存可以用32個1,即 1111…111 但是int定義的最大位應該是31位,因為最前面的那一位是符號判斷位,如果是0,就是正數,如果是1則表示負數。
而如果用unsigned int 則最大位可以達到32位,因為最前面的那一位不用用來當成符號判斷位了。
知道了這些後,就應該要學會位運算了
位運算的功能強大到可怕,我也是一知半解,但我發現一篇很好的文章,就直接引用了:
最後再聊回題目本身
給出乙個小於32位的正整數。這個數可以用乙個3232位的二進位制數表示(不足3232位用00補足)。我們稱這個二進位制數的前1616位為「高位」,後1616位為「低位」。將它的高低位交換,我們可以得到乙個新的數。試問這個新的數是多少(用十進位制表示)。這題有坑,如果你是先把十進位制轉化為二進位制,再調換位置,再將二進位制轉化為十進位制的,那麼你已經輸了一半了。例如,數13145201314520用二進位制表示為0000 0000 0001 0100 0000 1110 1101
100000000000000101000000111011011000(新增了1111個前導00補足為3232位),其中前1616位為高位,即0000
0000 0001 01000000000000010100;後1616位為低位,即0000 1110 1101
10000000111011011000。將它的高低位進行交換,我們得到了乙個新的二進位制數0000 1110 1101 1000 0000
0000 0001
010000001110110110000000000000010100。它即是十進位制的249036820249036820。
我再次強調,在計算機裡,儲存是二進位制儲存,那麼即使你輸入的是乙個十進值的數,它在計算機裡表達的還是二進位制,所以你只需要通過位運算模擬題目就行。所以本題ac**簡短到令人害怕。
洛谷 P1100 高低位交換
p1100 高低位交換 include include define ll long long 定價代換ll 代替long long void sw int a,int b 自定義數值交換函式 void fun ll n ll sum 0 int x 32 int k 0 while n n一直對2...
洛谷 P1100 高低位交換
給出乙個小於 2 的正整數。這個數可以用乙個 32 位的二進位制數表示 不足 32 位用 0 補足 我們稱這個二進位制數的前 16 位為 高位 後 16 位為 低位 將它的高低位交換,我們可以得到乙個新的數。試問這個新的數是多少 用十進位制表示 例如,數 1314520 用二進位制表示為 0000 ...
洛谷 高低位交換(P1100,二進位制)
給出乙個小於2 32的正整數。這個數可以用乙個32位的二進位制數表示 不足32位用0補足 我們稱這個二進位制數的前16位為 高位 後16位為 低位 將它的高低位交換,我們可以得到乙個新的數。試問這個新的數是多少 用十進位制表示 例如,數1314520用二進位制表示為00000000000101000...