【蓝桥杯】十六进制转八进制
2020-02-17 16:01:18来源:博客园 阅读 ()
【蓝桥杯】十六进制转八进制
题目
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
程序
#include<iostream>
#include<string>
using namespace std;
int main()
{
//freopen("data.txt","r",stdin); //此句用来测试
string six,oct[10],bin; //six存储每一个输入的十六进制,oct存储总的转换后的八进制,bin存储每一个中间二进制
int n;
cin>>n;
int binlen=bin.size();
int flagbin=0;
for(int i=0;i<n;i++)
{
cin>>six;
bin.erase(0,binlen); //每一轮使用bin存储二进制前先将其初始化
for(int j=0;j<six.size();j++)
{
switch(six[j]){ //十六进制转二进制,比较直白粗暴的方法
case '0':bin+="0000";break;
case '1':bin+="0001";break;
case '2':bin+="0010";break;
case '3':bin+="0011";break;
case '4':bin+="0100";break;
case '5':bin+="0101";break;
case '6':bin+="0110";break;
case '7':bin+="0111";break;
case '8':bin+="1000";break;
case '9':bin+="1001";break;
case 'A':bin+="1010";break;
case 'B':bin+="1011";break;
case 'C':bin+="1100";break;
case 'D':bin+="1101";break;
case 'E':bin+="1110";break;
case 'F':bin+="1111";break;
}
}
binlen=bin.size();
flagbin=0;
int flagoct=0;
int lenth=0;
while(bin[flagbin]=='0') //去除二进制前缀0
{
flagbin++;
binlen--;
}
if(flagbin!=0)
bin.erase(0,flagbin);
if(binlen%3==1) //向3的倍数补齐,便于八进制转换
{
bin="00"+bin;
}
else if(binlen%3==2)
{
bin="0"+bin;
}
binlen=bin.size();
for(flagbin=0;flagbin<binlen;) //将二进制转换为八进制
{
int tempnum;
tempnum=(bin[flagbin++]-'0')*4+(bin[flagbin++]-'0')*2+(bin[flagbin++]-'0');
switch(tempnum){ //同暴力转换
case 0:oct[i]+='0' ;break;
case 1:oct[i]+='1' ;break;
case 2:oct[i]+='2' ;break;
case 3:oct[i]+='3' ;break;
case 4:oct[i]+='4' ;break;
case 5:oct[i]+='5' ;break;
case 6:oct[i]+='6' ;break;
case 7:oct[i]+='7' ;break;
}
}
}
for(int p=0;p<n;p++)
{
cout<<oct[p]<<endl;
}
return 0;
}
编写程序中出现过的错误
1.八进制转换二进制时,忘了减‘0’
减‘0’是为了将字符形式的数字转化为int型进行计算,计算出tempnum后再使用switch句型转化为字符形式的八进制。
2.bin使用后忘记清空字符串
即每轮输入使用bin存储二进制后再次使用时忘记清除,在每轮开始前进行初始化即可
原文链接:https://www.cnblogs.com/wwj321/p/12320412.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- [题记-并查集] 合根植物 - 蓝桥杯 2020-04-07
- C++ 字符集 2020-03-26
- 蓝桥杯练习(入门一) 2020-03-23
- 十六进制转换 2020-02-23
- 以八进制、十进制、十六进制、布尔值形式输出相关数 2020-02-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash