0
点赞
收藏
分享

微信扫一扫

十六进制转化为八进制


提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


文章目录

  • ​​前言​​
  • ​​一、十六进制转化为八进制​​
  • ​​二、使用步骤​​
  • ​​1.引入库​​
  • ​​输出结果如下​​
  • ​​总结​​

前言

本题来自蓝桥杯,要求十六进制转化为八进制,思路就是首先将十六进制转化为二进制,再将二进制转化为八进制。

​​http://lx.lanqiao.cn/problem.page?gpid=D2249​​

提示:以下是本篇文章正文内容,下面案例可供参考

一、十六进制转化为八进制

十六进制转化为八进制_进制

二、使用步骤

1.引入库

代码如下(示例):

#include<iostream>
#include<cstring>
#include <stdlib.h>
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;
}



输出结果如下

十六进制转化为八进制_c++_02

十六进制转化为八进制_十六进制_03

总结


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


举报

相关推荐

0 条评论