• 蓝桥杯 基础练习 BASIC-12 十六进制转八进制


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

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

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

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

    样例输入
      2
      39
      123ABC

    样例输出
      71
      4435274

      提示
      先将十六进制数转换成某进制数,再由某进制数转换成八进制。
     
    示例代码:
     1 //十六进制转二进制,二进制转八进制 
     2  
     3 #include <iostream>
     4 #include <map>
     5 using namespace std;
     6 
     7 int main() {
     8     string s;            //输入的十六进制 
     9     string binaryNum;    //二进制数 
    10     int n;
    11     cin >> n;
    12     
    13     string str[16] = {"0000", "0001", "0010", "0011", 
    14                       "0100", "0101", "0110", "0111", 
    15                       "1000", "1001", "1010", "1011", 
    16                       "1100", "1101", "1110", "1111"};
    17                       
    18     map<string, string> m;
    19     m["000"] = "0"; m["001"] = "1"; m["010"] = "2"; m["011"] = "3"; 
    20     m["100"] = "4"; m["101"] = "5"; m["110"] = "6"; m["111"] = "7";
    21     
    22     for (int i = 0; i < n; i++) 
    23     {
    24         cin >> s;                                
    25         int len_s = s.length();
    26         for(int j = 0; j < len_s; j++) 
    27         {
    28             if(s[j] > '9') 
    29             {
    30                 binaryNum += str[s[j] - 'A' + 10];
    31             } 
    32             else
    33             {
    34                 binaryNum += str[s[j] - '0'];
    35             }
    36         }
    37         
    38         int len_b = binaryNum.length();            //二进制数的长度 
    39         if(len_b % 3 == 1)                         //将二进制的长度转为3的倍数 
    40         {
    41             binaryNum = "00" + binaryNum;        
    42         } 
    43         else if(len_b % 3 == 2) 
    44         {
    45             binaryNum = "0" + binaryNum;
    46         }
    47         
    48         int flag = 0;        //前导为0标志
    49         string temp;        //获取三位二进制数,将其转为八进制 
    50         string octalNum;    //八进制数 
    51         for(int j = 0; j < len_b; j += 3) 
    52         {
    53             temp = binaryNum.substr(j, 3);
    54             octalNum = m[temp];
    55             if(j == 0 && octalNum == "0")    //如果取出的二进制数前三位为0,则重新取接下来的3位二进制数 
    56             {
    57                 flag = 1;
    58                 continue;
    59             }
    60             if(flag == 1 && j == 3 && octalNum == "0") //如果接下来的二进制还为0,则继续取(后边取的肯定不是0) 
    61             {
    62                 continue;
    63             }
    64             cout << octalNum;
    65         }
    66         
    67         cout << endl;
    68         binaryNum = "";
    69     }
    70     
    71     return 0;
    72 }
  • 相关阅读:
    STL应用 map poj 2418
    STL应用 set hdu 1412
    STL应用 deque hdu 6375
    STL应用 queue poj 1915
    STL应用 map HDU 3527
    算法训练营 入门篇 STL应用 vector HDU 3527
    算法训练营:海量图解+竞赛刷题(入门篇)刷题, 算法基础知识点讲解与练习
    BFS 遍历例子
    【知识】MySQL索引原理及慢查询优化
    【MySQL优化】——看懂explain
  • 原文地址:https://www.cnblogs.com/cao-lei/p/7172355.html
Copyright © 2020-2023  润新知