Test Message

c665: 進制轉換

內容

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;
}