題目連結
https://zerojudge.tw/ShowProblem?problemid=a034
解題思路
在進入本題的討論之前,我們需要先了解何謂進位制。所謂的進位制,指的是以「基數」的指數和表示數字的記數方法。以最常見的十進位制來說,基數就是10。因此,以123這個數字來說,在十進位制下即為 1 x 102 + 2 x 101 + 3 x 100 。而所謂的二進位制,就是基數為2的進位制。除了基數不同以外,邏輯和十進位制其實相同。因此,在進行從十進位制到二進位制的轉換時,我們可以2的指數逐一降次檢查大小。
因為整數型態的變數可儲存的最大值為231,所以我們先從231開始檢查,若該數比231還大,就將該位數註記為1,並將其值減去231,否則將該位數註記為0。接著降次繼續檢查,直到整個數字檢查完畢,即完成二進位制的轉換。舉例來說,十進位制的123可以被表示為 1 x 26 + 1 x 25 + 1 x 24 + 1 x 23 + 0 x 22 + 1 x 21 + 1 x 20 ,因此其在二進位制表示法即為1111011。
注意事項
雖然並不常見,但只要符合寫法,迴圈可以同時使用多個控制變數。本程式碼內中的for迴圈就用了兩個變數控制迴圈運行,其中變數n代表的是檢查的次方,i代表的是轉換為二進位後的位數。
程式碼:C語言
1 |
|