切換
舊版
前往
大廳
主題

ZeroJudge - b052: 3. 設計一含小數點的十進位轉二進位的程式 解題心得

Not In My Back Yard | 2018-10-10 18:08:48 | 巴幣 0 | 人氣 321

題目連結:


題目大意:
給定一個十進位數字(可能有小數部分,但是整體數字長度不會超過8個數字長),將其轉換成二進位數字。


範例輸入:
10.5
234.125


範例輸出:
1010.1
11101010.001


解題思維:
雖然題目沒有明講,但是給定的數字似乎都保證,轉成二進位數字後並不會循環的樣子。

首先,把讀入的數字分成整數部分和小數部分(因為怕浮點數誤差,因此本人都是用整數型態存)。

整數部分的二進位轉換,一直除以2並取餘數即可,例如,18要轉成二進位:
18 / 2 = 9餘0
9 / 2 = 4餘1
4 / 2 = 2餘0
2 / 2 = 1餘0
1 / 2 = 0餘1
因此,17的二進位表示法為10010。

而小數部分,則是反過來,一直乘以2並取整數部分,例如0.125要轉成二進位:
0.125 * 2 = 0.25,整數部分是0。
0.25 * 2 = 0.5,整數部分是0。
0.5 * 2 = 1,整數部分是1。
因此0.125的二進位表示法為0.001。

把整數、小數分別做完後,再組回成一個二進位數字,即是所求。



此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作