问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。

一般的思路是将十六进制转换为十进制,然后转换为八进制.

一段示例代码:

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
long long hex_to_dec(string hex)
{long long dec = 0;   int len = hex.length();  for(int i=0 ;i<len;i++)  {  if(hex[i] >= 'A')  {  dec += (hex[i] - 'A' + 10)*pow(16,len-1-i);   }  else  {  dec += (hex[i] - '0')*pow(16,len-1-i);  }  }  return dec;
}
void dec_to_oct(long long dec)
{char a[100];   long long s = dec;  int i = 0;  while(s/8 != 0)  {  a[i++] = '0' + s%8;   s = s/8;  }  a[i] = '0' + s; while(i>=0){cout<<a[i--];}
}
int main()
{string str[10];int n;cin>>n;for(int i=0;i<n;i++){cin>>str[i];} for(int i=0;i<n;i++){dec_to_oct(hex_to_dec(str[i]));cout<<endl;}return 0;
}

如果提交上面的代码系统会判定代码错误,因为题目中有一句话:每个十六进制数长度不超过100000。这句话说明该十六进制数有可能是一个长度为100000的数,这不是long long 类型变量所能表示的,这应该就是错误所在。

做大数运算的常用手段就是字符串变量,这里我们使用字符串变量来表示对应的二进制数,得到下面的解法:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{string hex[10];string bin[10];string oct[10];int n;cin>>n;for(int i=0;i<n;i++){cin>>hex[i];} //16进制转2进制for(int i=0;i<n;i++){for(int j=0;j<hex[i].length();j++){switch(hex[i][j]){case '0':bin[i] += "0000";break;case '1':bin[i] += "0001";break;case '2':bin[i] += "0010";break;case '3':bin[i] += "0011";break;case '4':bin[i] += "0100";break;case '5':bin[i] += "0101";break;case '6':bin[i] += "0110";break;case '7':bin[i] += "0111";break;case '8':bin[i] += "1000";break;case '9':bin[i] += "1001";break;case 'A':bin[i] += "1010";break;case 'B':bin[i] += "1011";break;case 'C':bin[i] += "1100";break;case 'D':bin[i] += "1101";break;case 'E':bin[i] += "1110";break;case 'F':bin[i] += "1111";break;default :break;}}} //2进制转8进制for(int i=0;i<n;i++){int len = bin[i].length();int num = 0;int temp = 3;for(int j=len-1;j>=0;j--){if(bin[i][j] == '1') {switch(temp){case 3: num +=1;break;case 2: num +=2;break;case 1: num +=4;break;default:break;}}temp--;if(temp == 0){oct[i] += num + '0';num = 0;temp = 3; }            }if(temp != 0){oct[i] += num + '0'; }} //对8进制数逆序for(int i=0;i<n;i++){char temp;int len = oct[i].length();for(int j=0;j<len/2;j++){temp = oct[i][j];oct[i][j] = oct[i][len-1-j];oct[i][len-1-j] = temp; }} //输出数据for(int i=0;i<n;i++){int len = oct[i].length();int j=0;while(oct[i][j++] == '0');for(--j;j<len;j++){cout<<oct[i][j];}cout<<endl;} return 0;
} 

转载于:https://www.cnblogs.com/zhezh/p/3773335.html

蓝桥杯 【基础练习】 十六进制转八进制相关推荐

  1. 蓝桥杯 基础练习 十六进制转八进制

    目录: 1.原题 2.解题思路 3.代码实现 1.原题 资源限制 内存限制:512.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s问题 问 ...

  2. 蓝桥杯 基础练习 十六进制转八进制

    问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...

  3. 蓝桥杯-基础练习 十六进制转八进制

    问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...

  4. 蓝桥杯——基础练习 十六进制转八进制

    问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...

  5. [蓝桥杯]基础练习 十六进制转八进制

    16进制转成2进制,2进制转成8 #include<iostream> #include<string> #include<vector>using namespa ...

  6. 蓝桥杯练习题之十六进制转八进制

    基础练习 十六进制转八进制 时间限制:1.0s   内存限制:512.0MB 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n< ...

  7. 蓝桥杯——基础练习——十六进制转十进制

    package com.study.蓝桥杯.基础练习;/* 问题描述从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出.注:十六进制数中的10~15分别用大写的英文字母A.B ...

  8. 蓝桥杯C语言 十六进制转八进制

    十六进制转八进制 思路分析: 39十六进制先转换为4位二进制,3为0011,9为1001,所以39的二进制为00111001,又把二进制转化为3位八进制,从右边开始数,001为1,111为7,所以39 ...

  9. 蓝桥杯练习:十六进制转八进制

    题目链接:十六进制转二进制 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母 ...

  10. 蓝桥杯基础练习十六进制转十进制

    问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E.F表示. 样例输入 FFFF 样例输出 6 ...

最新文章

  1. 把.sql文件上传到服务器上
  2. android中使用哪种方式解析XML比較好
  3. 关于SQL Server数据库中的标识列
  4. linux建立与删除目录
  5. 数据挖掘 点击更多 界面_6(更多)技巧,可快速改善用户界面
  6. python去重语句_Python对列表去重的多种方法(四种方法)
  7. 移动开发在路上-- IOS移动开发系列 多线程三
  8. 解析HetuEngine实现On Yarn原理
  9. 星载计算机西北工业大学,星载计算机SRAM加固可靠性的研究与设计
  10. 在GNS3中如何让NETFLOW能够捕获到流量
  11. springmvc05 传值
  12. pcl dll load failed: 找不到指定的模块。_解决cuda10.1+tensorflow-gpu出现“cudart64_100.dll”问题...
  13. 关于 Windows6.1-KB2999226-x64.msu 此更新不适用你的计算机解决办法
  14. SQL中的日期差函数
  15. 数据挖掘与可视化相关论文
  16. 大数据爬虫前奏之Html和Css学习
  17. JxBrowser使用心得和带中文翻译的文档分享
  18. 浅谈如何学习网络编程
  19. 分布式事务处理框架之LCN
  20. html5表格数据加载,bootstrap table load加载数据到表格的方法

热门文章

  1. Java项目:医院分诊挂号住院管理系统(java+SpringBoot+FreeMarker+Mysql)
  2. js获取前后几天或者前后几个月的日期
  3. 桑叶黑芝麻糊,从头到脚通补
  4. SQL SERVER中什么情况会导致索引查找变成索引扫描
  5. Linux-LNMP(静态元素不记录日志和过期时间,防盗链,解析php,代理,支持ssl)
  6. 前端部分面试题整理,欢迎补充
  7. CentOS6.8 编译安装LNMP
  8. vCenter的安装
  9. http_build_query用法
  10. iometer硬盘测试工具附教程