d635. 幸運777?luck
題目 Problem
題目連結:https://zerojudge.tw/ShowProblem?problemid=d635
敘述 Description
你說什麼?777=511?怎麼可能…?
因為這裡是八進位的777轉換成10進位的511了~(好爛ˇ)
給你十進位的數字,請你把他們轉成八進位好嗎?
輸入 Input
每個測資點有多筆測資,請以EOF作為結束。
每組測資一行,有整數n(0<=n<=511),表示要轉換成八進位的數字
最後出現小於0的整數表示測資結束。
<所有出現的整數皆可以signed 32-bits int儲存>
輸出 Output
對於每一行測資請輸出整數n的八進位表示。
對於最後一個小於0的整數,請輸出-1。
範例輸入 Sample Input
1 |
|
範例輸出 Sample Output
1 |
|
提示 Hint
1.進位制轉換
2.共三個測資點30%、35%、35%,
第一個測資點即範例測資。
題解 Solution
以EOF作為結束?最後出現小於0的整數表示測資結束?
到底是我國文爛還是題目敘述爛?(好歹我大學國文門檻過了)
有些人會用C++內建轉$8$進位的,但還是要知道概念
$10$進位的$$511_{(10)}$$會是
$$ 511_{(10)} = 5 * 10^2 + 1 * 10^1 + 1 * 10^0 $$
$8$進位的$$777_{(8)}$$會是
$$ 777_{(8)} = 7 * 8^2 + 7 * 8^1 + 7 * 8^0 = 511_{(10)} $$
$8$進位的$$173_{(8)}$$會是
$$ 173_{(8)} = 1 * 8^2 + 7 * 8^1 + 3 * 8^0 = 123_{(10)} $$
大致上不論是轉成$N$進位都差不多
$10$進位轉成$8$進位
先把數字 $MOD\ 8$ 就可以求出$8$進位中的個位數
$123%8=3$
再把數字 $/\ 8$ 後再 $MOD\ 8$ 就可以求出$8$進位中的下個位數
$123/8=15$
$15%8=7$
再把數字 $/\ 8$ 後再 $MOD\ 8$ 就可以求出$8$進位中的下個位數
$15/8=1$
$1%8=1$
然後把數字倒敘輸出就可以拿到$1,7,3$
如果可以EOF結尾,我就把負數自動設定為$-1$
輸入$0$出來會是空白,所以還加了特判
程式碼 Accepted Code
1 |
|
後記 Afterword
這題題目敘述真的是爛到吃了好幾個 WA
寫 UVa 題目也有碰過一次,題目沒有寫清楚
最後還是看了一下 AC Code 才知道在寫什麼