進制字串轉整數

0.5s 256M

請實作一個名為 parse_base 的函式。評分程式會給你一個用 \(d\) 進制表示的非負整數字串 s,以及進制 d,你需要回傳這個數在十進制下的值。

你需要實作以下函式:

long long parse_base(const string& s, int d);
  • 正式評分程式會準備參數 s 與 d,然後呼叫 parse_base(s, d);。
  • 請不要自行處理輸入輸出。
  • \(d\) 進制的位數字 \(0\) 到 \(9\) 就寫成 0 到 9;位數字 \(10\) 到 \(35\) 用英文字母表示,A(或 a)代表 \(10\)、B(或 b)代表 \(11\),依此類推到 Z(或 z)代表 \(35\)。大小寫都可能出現。
  • 評測會檢查你的原始碼,禁止呼叫 stoi、stoll、strtoll 等會直接完成本題核心工作的標準函式。請在 parse_base 中自行實作。

輸入格式

範例評分程式採用以下格式輸入:

T
每一行放一次函式呼叫需要的參數,依序是 d 與 s

其中 \(T\) 代表評分程式會呼叫 parse_base 的次數。

請注意,正式評分時不會要求你自行讀取輸入;它會直接呼叫你實作的函式。

限制

  • \(1 \le T \le 40\)
  • \(2 \le d \le 36\)
  • s 只由 0~9、A~Z、a~z 組成,且每一位都是 \(d\) 進制的合法位數字(數值小於 \(d\))
  • s 不會有多餘的前導零(但 s 可以是單獨一個 0)
  • s 所代表的數值介於 \(0\) 與 \(10^{18}\) 之間

輸出格式

範例評分程式會輸出每次呼叫後得到的結果。

請注意,正式評分時不會要求你自行輸出任何內容。

範例輸入 1

4
2 1011
16 FF
36 Z
10 0

範例輸出 1

11
255
35
0

範例解釋 1

\(1011_{(2)} = 1 \times 8 + 0 \times 4 + 1 \times 2 + 1 \times 1 = 11\)。

\(\text{FF}_{(16)} = 15 \times 16 + 15 = 255\)。

\(\text{Z}_{(36)} = 35\)。

範例輸入 2

3
16 ff
36 aZ
8 777

範例輸出 2

255
395
511

範例解釋 2

小寫字母跟大寫字母代表同一個位數字:\(\text{ff}_{(16)} = \text{FF}_{(16)} = 255\)。

\(\text{aZ}_{(36)} = 10 \times 36 + 35 = 395\),同一個字串裡大小寫可能混用。

範例輸入 3

2
10 1000000000000000000
36 ZZZZZZZZZZZ

範例輸出 3

1000000000000000000
131621703842267135

範例解釋 3

答案可能很大,int 裝不下。

題目頁說明

快速鍵

主要功能

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

限制

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