资源限制
时间限制:1.0s 内存限制:512.0MB

问题描述

给定n个十六进制正整数,输出它们对应的八进制数。

输入格式

输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0-9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式

输出n行,每行为输入对应的八进制正整数。

注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入

2
  39
  123ABC

样例输出

71
  4435274

提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

先贴出一个没有AC过的代码

#include<iostream>
#include<cstdio>
#include<string>
#include<ctype.h>
#include<algorithm>
using namespace std;
void trans(string s){long long x=0;for(int i=0;i<s.length();i++){if(isdigit(s[i])){x=x*16+s[i]-'0';}else{x=x*16+s[i]-'A'+10;}}string res="";while(x!=0){res+=x%8+'0';x/=8;}reverse(res.begin(),res.end());cout<<res;
}
int main(){int n;string s;scanf("%d",&n);while(n--){cin>>s;trans(s);printf("\n");}return 0;
}

这个代码很简单,但是题目说了16进制的数字长度不超过100000,那就有可能到了长度100000,想一想,16的100000是非常大的,long long也没有办法。所以,只能另辟蹊径。

先将16进制,转化为2进制,就是将16进制的每一位拆成4为,最后组成一个巨长的字符串。接着,从字符串最后一位开始,三位三位的转换为8进制,不断地添加到现有的8进制字符串前面。考虑到字符串长度不一定就是3的倍数,最后可能会有剩余导致前面有前置零,所以我们还需要将前面的零抹去。

代码如下(AC)

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){string s;int n;scanf("%d",&n);while(n--){cin>>s;string two;for(int i=0;i<s.length();i++){switch(s[i]){case '0':{two+="0000";break;}case '1':{two+="0001";break;}case '2':{two+="0010";break;}case '3':{two+="0011";break;}case '4':{two+="0100";break;}case '5':{two+="0101";break;}case '6':{two+="0110";break;}case '7':{two+="0111";break;}case '8':{two+="1000";break;}case '9':{two+="1001";break;}case 'A':{two+="1010";break;}case 'B':{two+="1011";break;}case 'C':{two+="1100";break;}case 'D':{two+="1101";break;}case 'E':{two+="1110";break;}case 'F':{two+="1111";break;}}}string eight;int flag=1;int num=0;for(int i=two.length()-1;i>=0;i--){if(two[i]=='1'){switch(flag){case 1:{num+=1;break;}case 2:{num+=2;break;}case 3:{num+=4;break;}}}flag++;if(flag==4){flag=1;eight=(char)(num+'0')+eight;num=0;}}if(num!=0){eight=(char)(num+'0')+eight;}while(eight[0]=='0'){eight.erase(eight.begin());}cout<<eight<<endl;}return 0;
}

十六进制转八进制——进制转换相关推荐

  1. python学习-综合练习三(斐波那契数列、阿姆斯特朗数、//和/、十进制转二进制bin、八进制oct、十六进制hex、进制转换源码、python中::和:的区别)

    文章目录 斐波那契数列 阿姆斯特朗数 十进制转二进制bin.八进制oct.十六进制hex 补充进制转换源码 python中::和:的区别 说明:本篇博文的知识点大部分来自 Python3 实例 斐波那 ...

  2. php八进制十六进制,php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码...

    十进制转换为二进制.八进制.十六进制 从十进制向其它进制转换,用的是就用该数字不断除以要转换的进制数,读取余数.连接一起就可以了. 复制代码代码如下: /** *十进制转二进制.八进制.十六进制不足位 ...

  3. 二进制,十进制,八进制,十六进制之间的进制转换

    常见的进制转换 十进制转二进制 方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止. 然后将所得到的余数从最后一位开始倒过来得到的就是 ...

  4. 二、八、十、十六进制介绍及进制转换

    进制:是计算机中数据的一种表示方法.N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F表示. 10进制:用0~9的数表示,逢10进1. 16进制:由0~9,A~F组成,与10进制的对应关系是 ...

  5. 信号与传输介质和计算机进制转换

    1.信号相关的概念 信息 不同领域对信息有不同的定义,一般认为信息是人们对现实世界事物的存在方式或运动状态的某种认识.表示信息的形式可以是数值.文字.图形.声音.图像及动画等. 数据 数据是用于描述事 ...

  6. python十进制转八进制_python进制转换(二进制、十进制和十六进制)及注意事项...

    使用内置函数实现进制转换实现比较简单,主要用到以下函数: bin().oct().int().hex() 下面分别详解一下各个函数的使用(附实例) 第一部分:其他进制转十进制 1.二进制转十进制 使用 ...

  7. 【愚公系列】2021年12月 网络工程-进制转换

    文章目录 一.进制 1.二进制 2.八进制 3.十进制 4.十六进制 二.进制转换 `1.二进制转八进制` `2.二进制转十进制` `3.二进制转十六进制` `4.八进制转二进制` `5.八进制转十进 ...

  8. 进制转换--python实现

    文章目录 前言 一.进制介绍 二进制的整型,逢二进一 八进制的整型,逢八进一 十进制的整型,逢十进一 十六进制的整型,逢十六进一 进制转换 十进制转换成二进制,使用bin()函数实现 十进制转换成八进 ...

  9. 基础知识——进制 与 进制转换 (C++ 程序)

    目录 一.进制的定义 二.表示方法 1.当进制数 ≤ 10时 2.当进制数>10时 三.进制的计算 1.整数 2.小数 3.非十进制数 4.非十进制转十进制 四.十进制转非十进制数 1.整数部分 ...

最新文章

  1. WMI技术介绍和应用——查询硬件信息
  2. Codeforces 1009D:Relatively Prime Graph
  3. 互联网发展趋势:社区化、碎片化、一站式、寒冬
  4. 如何修改浏览器服务器时间格式,浏览器模式怎么改模式
  5. JS获取请求URL相关参数
  6. 一步一步写算法(之排序二叉树)
  7. 博客linux系统下载器,linux的下载工具
  8. 【CF585-div2:C】Swap Letters(贪心)
  9. 各国货币代码表(Currency Code)
  10. 逐点比较直线插补和圆弧插补
  11. 【定量分析、量化金融与统计学】R语言MANOVA多元方差分析
  12. 写函数,计算传入函数的字符串中,数字、字母、空格 以及 其他内容的个数,并返回结果
  13. 线程池ThreadPoolExecutor与ForkJoinPool
  14. Linux 使用shell命令复制文件
  15. Arcgis中给nodata的值设为空
  16. 学习强国:我国自研统信软件操作系统有了“终端管家”
  17. VS2005 常见问题分析
  18. M2MQTT客户端MqttClient异常问题解决
  19. 模取幂运算 计算a^b mod n
  20. 最大边缘相关多样性算法MMR的学习和实现

热门文章

  1. 使用Hexo在GitHub Pages上搭建部署免费的个人博客网站(上:GitHub搭建)——最详细全面解读教程(没有之一)
  2. 如何准备软件工程师的面试
  3. 【每日早报】201/10/28
  4. MFC界面库BCGControlBar Pro MFC v33.2亮点 - 全新Office 2022主题样式
  5. CSS实现水平垂直居中
  6. P5514 [MtOI2019]永夜的报应 题解
  7. 笔记本电脑静音后再取消静音,外设会没声音解决
  8. 记一次vue-element-admin路由问题
  9. Android系统连按5次电源键,连按5次手机电源键竟有这个功能,紧急情况很有用,大家都该知道...
  10. disruptor的使用