進制字串轉整數
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 裝不下。