• lqb 基础练习 十六进制转八进制 (字符串进行进制转化)


    基础练习 十六进制转八进制  

    时间限制:1.0s   内存限制:512.0MB
       
    问题描述
      给定n个十六进制正整数,输出它们对应的八进制数。

    输入格式
      输入的第一行为一个正整数n (1<=n<=10)。
      接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

    输出格式
      输出n行,每行为输入对应的八进制正整数。

      【注意
      输入的十六进制数不会有前导0,比如012A。
      输出的八进制数也不能有前导0。

    样例输入
      2
      39
      123ABC

    样例输出
      71
      4435274

      提示
      先将十六进制数转换成某进制数,再由某进制数转换成八进制。
     
    分析:
      将输入的十六进制转化为对应的二进制,
      再将二进制转化为对应的八进制就简单多了
     
    PS:
      十六进制输入输出%x(字母部分用小写) 或者 %X(字母部分用大写)
      八进制输入输出 %o
      十进制输入输出 %d.
      (备注:用于这道题数据量较大不能使用简单的数据类型转化解决所有的数据)
     
    C/C++代码实现(AC):
      
     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <cmath>
     6 #include <stack>
     7 #include <map>
     8 #include <queue>
     9 
    10 using namespace std;
    11 
    12 int main()
    13 {
    14     int n;
    15     scanf("%d", &n);
    16     while(n --)
    17     {
    18         string str1, str2;
    19         cin >>str1;
    20         int len = str1.size();
    21         for (int i=0; i<len; ++i) {
    22             if (str1[i] == '0') str2 += "0000";
    23             else if (str1[i] == '1') str2 += "0001";
    24             else if (str1[i] == '2') str2 += "0010";
    25             else if (str1[i] == '3') str2 += "0011";
    26             else if (str1[i] == '4') str2 += "0100";
    27             else if (str1[i] == '5') str2 += "0101";
    28             else if (str1[i] == '6') str2 += "0110";
    29             else if (str1[i] == '7') str2 += "0111";
    30             else if (str1[i] == '8') str2 += "1000";
    31             else if (str1[i] == '9') str2 += "1001";
    32             else if (str1[i] == 'A') str2 += "1010";
    33             else if (str1[i] == 'B') str2 += "1011";
    34             else if (str1[i] == 'C') str2 += "1100";
    35             else if (str1[i] == 'D') str2 += "1101";
    36             else if (str1[i] == 'E') str2 += "1110";
    37             else if (str1[i] == 'F') str2 += "1111";
    38         }
    39 
    40         int len_ = str2.size();
    41         if (len_ % 3 == 1) str2 = "00" + str2;
    42         if (len_ % 3 == 2) str2 = "0" +str2;
    43 
    44         int len_now = str2.size(), flag = 0, temp;
    45         for (int i = 0; i < len_now; i += 3)
    46         {
    47             temp = int(str2[i] - '0') * 4 + int(str2[i + 1] - '0') * 2
    48                    + int(str2[i + 2] - '0');
    49             if (temp) flag = 1;
    50             if (flag) printf("%d", temp);
    51         }
    52         printf("
    ");
    53     }
    54     return 0;
    55 }
  • 相关阅读:
    rpm命令参数(转载)
    通过KMS服务器激活windows
    icehouse版本中常用操作命令
    openstack环境搭建常用命令
    openstack 重启服务命令
    python连接mysql数据库报错pymysql连接数据库报错TypeError: __init__() takes 1 positional argument but 5 positional arguments
    Linux下LDAP统一认证解决方案
    windows系统添加IP地址黑名单
    网站防止SQL注入
    Windows服务器修改远程端口号的方法
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/9033654.html
Copyright © 2020-2023  润新知