ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PAT-进制转换-1027 Colors in Mars (20分)

2020-03-03 23:09:07  阅读:287  来源: 互联网

标签:1027 radix 20 ++ 13 Colors num printf datas


题目描述:

  给定三个[0,168]范围内的十进制整数,将它们转换为十三进制后按顺序输出。

  单词:radix--基数

输入格式:

  输入三个十进制数,用空格隔开。

输出格式:

  首先输出#,然后是6位数,其中英文字符必须大写。如果单色只有1位数字长,必须其左侧打印0。

样例:

  输入:15 43 71

  输出:#123456

思路:

  由于题目的数据范围为[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

 

 

参考-《算法笔记》-胡凡

标签:1027,radix,20,++,13,Colors,num,printf,datas
来源: https://www.cnblogs.com/fangzhiyou/p/12405378.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有