題目描述: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;
法二:
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 }
參考-《算法筆記》-胡凡