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


    题目描述:

      给定三个[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

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

  • 相关阅读:
    Could not transfer artifact org.apache.maven.plugins:maven-resources-plugin:pom:2.6 from/to central
    SpringMVC详解
    数据库连接池
    事务的隔离级别
    数据库四大特性
    Eclipse自动编码提示设置
    RequestDispatcher.forward转发与HttpServletResponse.sendRedirect重定向
    c#代码混淆
    java反射机制
    (转)redis是什么
  • 原文地址:https://www.cnblogs.com/fangzhiyou/p/12405378.html
Copyright © 2020-2023  润新知