題目連結:
題目大意:
給定一個十進位數字(可能有小數部分,但是整體數字長度不會超過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。
把整數、小數分別做完後,再組回成一個二進位數字,即是所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。