二進制與十六進制互轉

1.0s 256M

二進制與十六進制之間可以直接互相轉換,不必先算出這個數在十進制下是多少。

給你一個轉換方向 \(t\) 與一個數字字串 \(s\):

  • 若 \(t = 1\),\(s\) 是十六進制表示的非負整數,請輸出它的二進制表示。
  • 若 \(t = 2\),\(s\) 是二進制表示的非負整數,請輸出它的十六進制表示。

十六進制的位數字 \(10\) 到 \(15\) 用大寫英文字母 A 到 F 表示。

輸入格式

輸入有兩行:

  • 第一行是一個整數 \(t\),代表轉換方向。
  • 第二行是一個數字字串 \(s\)。

保證 \(s\) 不會有多餘的前導零(例如不會出現 007,但 0 本身是合法的)。

限制

  • \(t \in \{1, 2\}\)
  • \(1 \le |s| \le 10^5\)
  • 若 \(t = 1\),\(s\) 只由 0~9 與 A~F 組成
  • 若 \(t = 2\),\(s\) 只由 0 與 1 組成

輸出格式

輸出一行,為轉換後的數字字串,不能有多餘的前導零。

範例輸入 1

1
1F

範例輸出 1

11111

範例解釋 1

1 攤開是 0001、F 攤開是 1111,接起來是 00011111,去掉前導零後是 11111。

範例輸入 2

2
11111

範例輸出 2

1F

範例解釋 2

11111 只有 \(5\) 位,不是 \(4\) 的倍數,左邊補到 \(8\) 位變成 00011111,再每 \(4\) 位一組換成 1 與 F。

這正是範例 1 的反向操作。

範例輸入 3

1
0

範例輸出 3

0

範例輸入 4

1
FFFFFFFFFFFFFFFFFF

範例輸出 4

111111111111111111111111111111111111111111111111111111111111111111111111

範例解釋 4

\(s\) 可以長到任何內建整數型態都裝不下——所以不能先把它換算成整數再轉回去。

題目頁說明

快速鍵

主要功能

  • 範例測試 — 執行題目附帶的範例測資並自動比對預期輸出。
  • 自訂測試 — 自己貼 stdin 執行程式。可勾選「與預期輸出比對 (diff)」做行對行比對。
  • 模板 — 貼上你在個人資料設定的預設程式碼模板。
  • 協作 — 與其他同學共筆編輯這題的程式碼。
  • 自動草稿 — 編輯器內容每 1.5 秒自動存到瀏覽器(per 帳號 / 題目 / 語言)。
  • 提交 — 把程式碼交給 judge 評測,回傳 AC / WA / TLE 等結果。

限制

  • 程式碼最多 65,536 字元
  • 自訂測試 stdin 與預期輸出各最多 1 MB (約 100 萬字元)
  • 自訂測試與範例測試共用一個沙箱,每人約 3 秒 1 次 (範例測試 1 秒 1 次)
  • 自訂測試與範例測試都有 15 秒 牆鐘上限(正式評測仍依題目原本時限)
  • 互動題不提供自訂測試(無法模擬與 judge 互動)。
  • 提交評測本身沒有 rate limit,但同題短時間內多次提交會被視為刷分。