资源限制
时间限制: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. PoE供电中功率损耗问题
  2. python面试题_Python面试题大全
  3. js 获取鼠标在画布的位置_javascript求鼠标在canvas画布里的坐标
  4. Python for else 的使用(银行账号的登录)
  5. matlab 内存读取数据,matlab
  6. thinkcmf ajax,thinkcmfx 中如何用jquery ajax提交数据,自己尝试去做之后,还是没法提交,求助!...
  7. 12c oracle 修改内存_还在等12.2吗?Oracle 12c后这个观念要改改!
  8. 啊哈算法-游戏币问题(dp)
  9. Jmeter并发压测
  10. 对程序员来说,创业公司和大公司应该怎么抉择?
  11. PAT 乙级 1039. 到底买不买(20)Java版
  12. oracle去掉重复记录语句
  13. 世界编程语言2008年初排行榜
  14. cad导出pdf_手机如何一键分享CAD图纸?(差点成了背锅大侠)
  15. matlab:夫琅禾费衍射简单仿真
  16. 白平衡(WB:white balance)数值设置
  17. maven docker 部署到多台机器上。。_TensorFlow Serving + Docker + Tornado机器学习模型生产级快速部署
  18. 神经网络学习小记录2——利用tensorflow构建循环神经网络(RNN)
  19. STVD 编译提示 #error clnk :1 missing output file 的问题
  20. 规范化理论:如何求属性集X关于F的闭包?

热门文章

  1. Char GPT社会化的过程
  2. linux io复用命令,Linux中IO多路复用机制
  3. Java中的三目运算符 详解
  4. 路由器转发IP包的过程
  5. python输入文字垂直输出_在python中如何将横向输入的中文竖直输出
  6. Java中8种包装类型
  7. Hbase面试题简要总结
  8. Navicat 图形化操作mysql 基本操作
  9. Opencv中的GrabCut图像分割
  10. 【SAP消息号FH409】