zoukankan      html  css  js  c++  java
  • 蓝桥杯 基础练习 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 }
  • 相关阅读:
    Python 模块 itertools
    Python 字符串的encode与decode
    python 模块 hashlib(提供多个不同的加密算法)
    暴力尝试安卓gesture.key
    hdu 1300 Pearls(DP)
    hdu 1232 畅通工程(并查集)
    hdu 1856 More is better(并查集)
    hdu 1198 Farm Irrigation(并查集)
    hdu 3635 Dragon Balls(并查集)
    hdu 3038 How Many Answers Are Wrong(并查集)
  • 原文地址:https://www.cnblogs.com/cao-lei/p/7172355.html
Copyright © 2011-2022 走看看