提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
 - 一、十六进制转化为八进制
 - 二、使用步骤
 
- 1.引入库
 - 输出结果如下
 
- 总结
 
前言
本题来自蓝桥杯,要求十六进制转化为八进制,思路就是首先将十六进制转化为二进制,再将二进制转化为八进制。
http://lx.lanqiao.cn/problem.page?gpid=D2249
提示:以下是本篇文章正文内容,下面案例可供参考
一、十六进制转化为八进制

二、使用步骤
1.引入库
代码如下(示例):
using namespace std;
string trans(char a) {
  switch (a)
  {
  case '0':return "0000"; break;
  case '1':return "0001"; break;
  case '2':return "0010"; break;
  case '3':return "0011"; break;
  case '4':return "0100"; break;
  case '5':return "0101"; break;
  case '6':return "0110"; break;
  case '7':return "0111"; break;
  case '8':return "1000"; break;
  case '9':return "1001"; break;
  case 'A':return "1010"; break;
  case 'B':return "1011"; break;
  case 'C':return "1100"; break;
  case 'D':return "1101"; break;
  case 'E':return "1110"; break;
  case 'F':return "1111"; break;
  }
}
int  main() {
  int n;
  int t = 0;//定义二进制的每一位
  cin >> n;//此时n<10,后面直接定义数组大小为10
  string  sixteen[10];//定义十六进制string类型的数组
  for (int i = 0; i < n; i++)
  {
    cin >> sixteen[i];
  }
  for (int i = 0; i < n; i++)
  {
    string two, eight;//定义二 八进制的字符串
    for (int j = 0; j < sixteen[i].length(); j++)
    {
      two += trans(sixteen[i][j]);//读取字符串第i位第j个字符转化为2进制
    }
    int k = two.length() % 3;//判断2进制字符串大小,用于补齐
    if (k == 1)
    {
      two.insert(0, "00");//insert函数用于在第0位之前插入字符串‘00’;
    }
    if (k == 2)
    {
      two.insert(0, "0");//原理同上
    }
  
    while (t < two.length())
    {
      eight += (two[t] - '0') * 4 + (two[t + 1] - '0') * 2 +(two[t+2] - '0')+'0';//将2进制字符串通过数字转化为八进制
      
      t = t + 3;//每三位一转化
    }
    
    if (eight[0] == '0')//判断首位是否为0
    {
      for (int k = 0; k < eight.length(); k++)
      {
        eight[k] = eight[k + 1];//用第k+1位覆盖第k位
      }
    }
    cout << eight << endl;
    t = 0;//置零
  }
  return 0;
}输出结果如下


总结
主要问题要将十六进制 转化为2进制,在转化为8进制就可以得到结果。










