內容
16 進位是以 16 為底的進位制,用 0 ~ 9, A ~ F 來表示。
36 進位是以 36 為底的進位制,用 0 ~ 9, A ~ Z 來表示。
本題要請您設計一個可以將數字在 2 ~ 36 進制間轉換的程式。
每行測資將會有 n b1 b2 三個文數字
n 是以 b1 為底的文數字,請把它轉換為 b2 進制後輸出。
輸入
101 2 4
CQF 27 3
10010011100110100 2 14
輸出
11
110222120
1D780
解題思路
先將輸入轉成 10 進制,再將 10 進制轉成目標進制的輸出。
完整程式碼
AC (2ms, 100KB)
#include <stdio.h>
const char A = 'A' - 10; int b1, b2, rem, sum; char input[2000], * output;
int main() { while (scanf("%s %d %d", input, &b1, &b2) == 3) { output = input + 999; sum = 0; for (int i = 0; input[i]; i++) { if (input[i] <= '9') sum = sum * b1 + (input[i] - '0'); else sum = sum * b1 + (input[i] - A); } while (sum) { rem = sum % b2; *--output = rem <= 9 ? rem + '0' : rem + A; sum /= b2; } puts(output); } return 0; }
|