蓝桥杯基础练习-十六进制转八进制
作者:互联网
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
using namespace std;
///先16转2,再判断转换后的开头三个是否为0(16进制下1转换为2进制为0001),然后将2转换为8.
int main()
{
int n;
cin>>n;
for(int i = 0; i < n; i++)
{
string str;
cin>>str;
string er;
string eight;
int len = str.length();
for(int j = 0; j < len; j++)
{
switch(str[j])
{
case'0':er+="0000";break;
case'1':er+="0001";break;
case'2':er+="0010";break;
case'3':er+="0011";break;
case'4':er+="0100";break;
case'5':er+="0101";break;
case'6':er+="0110";break;
case'7':er+="0111";break;
case'8':er+="1000";break;
case'9':er+="1001";break;
case'A':er+="1010";break;
case'B':er+="1011";break;
case'C':er+="1100";break;
case'D':er+="1101";break;
case'E':er+="1110";break;
case'F':er+="1111";break;
default:break;
}
}
int m = er.length()%3;
if(m==1)er.insert(0,"00");
if(m==2)er.insert(0,"0");
int k = 0;
if(er.substr(k,3)=="000")k+=3;
for(int j = k; j < er.length(); j+=3)
{
string s = er.substr(j,3);
if(s=="000")eight+='0';
if(s=="001")eight+='1';
if(s=="010")eight+='2';
if(s=="011")eight+='3';
if(s=="100")eight+='4';
if(s=="101")eight+='5';
if(s=="110")eight+='6';
if(s=="111")eight+='7';
}
cout<<eight<<endl;
}
return 0;
}
标签:case,十六进制,int,蓝桥,eight,break,八进制,er 来源: https://blog.csdn.net/wys5wys/article/details/88357045