PAT-進制轉換-A1027 Colors in Mars (20分)

題目描述:ios

  給定三個[0,168]範圍內的十進制整數,將它們轉換爲十三進制後按順序輸出。算法

  單詞:radix--基數數組

輸入格式:ide

  輸入三個十進制數,用空格隔開。spa

輸出格式:3d

  首先輸出#,而後是6位數,其中英文字符必須大寫。若是單色只有1位數字長,必須其左側打印0。code

樣例:blog

  輸入:15 43 71it

  輸出:#123456io

思路:

  因爲題目的數據範圍爲[0,168],所以給定的整數x在十三進制下必定能夠表示爲x=a*131+b*130(由於168<13),因而只要想辦法求出a跟b便可。因而設置字符數組radix[13]來存儲13進制的數字radix[0]=0,radix[1]=1····radix[12]='C'。radix[num/13]即爲13進制的第一位數,radix[num%13]即爲13進制的第二位數。

注意點:

  若是採用正常的進制轉換,要注意用0填充位數。

代碼:

  法一:

 1 #include <cstdio>
 2 //創建0~13與0~9’、A’、'B’、C’的關係
 3 char radix[13] = { '0','1','2','3','4','5','6','7','8','9','A','B','C' };
 4 
 5 int main(){
 6     //輸入三個整數
 7     int r,g,b;
 8     scanf("%d%d%d", &r, &g, &b);
 9     printf("#");
10 
11     //輸出radix[a]與radix[b]
12     printf("%c%c", radix[r / 13], radix[r % 13]);
13     printf("%c%c",radix[g / 13],radix[g % 13]);
14     printf("%c%c",radix[b / 13],radix[b % 13]);
15 
16     return 0;
View Code

  法二:

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 
 5 int datas[48];
 6 char note[3] = { 'A','B','C' };
 7 
 8 int main()
 9 {
10     int r, g, b, num = 0;
11 
12     scanf("%d %d %d", &r, &g, &b);
13     printf("#");
14 
15     //獲取第一位數轉換
16     do
17     {
18         datas[num++] = r % 13;
19         r /= 13;
20     } while (r != 0);
21     if (num != 2)
22     {
23         datas[num] = 0;
24         num++;
25     }
26 
27     //獲取第二位數的轉換
28     do
29     {
30         datas[num++] = g % 13;
31         g /= 13;
32     } while (g != 0);
33     if (num != 4)
34     {
35         datas[num] = 0;
36         num++;
37     }
38 
39     //獲取第三位數的轉換
40     do
41     {
42         datas[num++] = b % 13;
43         b /= 13;
44     } while (b != 0);
45     if (num != 6)
46     {
47         datas[num] = 0;
48         num++;
49     }
50 
51     //進行輸出
52     for (int i = 1;i < num;i += 2)
53     {
54         if (datas[i] >= 10)printf("%c", note[datas[i] - 10]);
55         else printf("%d", datas[i]);
56 
57         if (datas[i - 1] >= 10)printf("%c", note[datas[i - 1] - 10]);
58         else printf("%d", datas[i - 1]);
59     }
60 
61     return 0;
62 }
View Code

 

 

參考-《算法筆記》-胡凡

相關文章
相關標籤/搜索