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