16进制数转换为8进制数

题目描述

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

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

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

题目分析

将16进制逐位转换为4位2进制,然后再3位一组,转换为8进制数
注意:如果字符串的截取与拼接以及采用合适的符合题意的方式输出

代码实现

完整代码

#include<iostream>
#include<string>
#include <stdio.h>
#include <stdlib.h>
#include<sstream>//用于实现string >> int
#include<cmath>//数学函数
#include <Windows.h>
using namespace std;//首位填充0元素
string MakeUp(string str,int num){string zero;int len=str.length();int n;if(len<num){n=num-len;for(int i=0;i<n;i++)zero+="0";return zero+str;}else return str;
}//2进制转8进制
string BitToOct(string str){string oct;//8进制字符串接收返回值 string new_oct;string bit;//存储截取的3位2进制字符串stringstream ss;//采用文件流将string 与 int 相互转换while(str.length()!=0){//判断是否够3位if(str.length()<3){str=MakeUp(str,3);//补0,位数是3位int sum=0,a;//按权值相加,得到8进制数for(int i=0;i<3;i++){stringstream s1;s1<<str[i]; s1>>a;if(a)sum+=pow(2.0,2-i);}str="\0";//字符串清空 ss<<sum;ss>>oct;ss.clear();//务必清除,否则会出错new_oct+=oct;//字符串拼接}else{bit=str.substr(str.length()-3);//截取后三位int sum=0,a;//按权值相加,得到8进制数for(int i=0;i<3;i++){stringstream s1;s1<<bit[i]; s1>>a;if(a)sum+=pow(2.0,2-i);}str=str.substr(0,str.length()-3);//删除后三位ss<<sum;ss>>oct;ss.clear(); //务必清除,否则会出错new_oct+=oct;//字符串拼接}} return new_oct;}//16进制转换2进制,此处注意:不足4位补齐四位
string HexToBit(char c){string str;//接收返回值 int a=0;//十进制数 char cc[4];if(c>='0'&&c<='9')a=a+c-'0';else if(c>='A'&&c<='F')a=a+c-'A'+10;itoa(a,cc,2);//将10进制数转换为2进制数str=cc;//所得存入字符串    str=MakeUp(str,4);//补0,位数是4位return str;
}//倒置输出
string IndOutput(string str){string oct;int len=str.length();for(int i=len-1;i>=0;i--){if(i==len-1&&str[i]=='0'){   //抹去0操作 oct+="";}else{oct+=str[i];//字符串拼接}}return oct;
}int main(){int n;//数字个数string hex[10];string bit;//存放2进制位 cin>>n;//循环输入for(int i=0;i<n;i++)cin>>hex[i];for(int i=0;i<n;i++){int len=hex[i].length();for(int j=0;j<len;j++){string str=hex[i].substr(j,1);//截取每一位char c=str[0];bit+=HexToBit(c);}cout<<IndOutput(BitToOct(bit))<<endl;//逆序输出,bit="\0";//bit清空 }}

运行结果

2
76
941FAB
166
45017653
--------------------------------
Process exited after 12.85 seconds with return value 0

总结

关于进制的转换,字符转换后拼接尤为重要,而且得将他们先转为2进制,而16>>2,一位变四位,2>>,3位变一位,其中关于不够位的采取首项补0方式,这也是需要考虑到的。总之本次的进制转换不是最优的,会在下一次完善,可累死我了。

将16进制数转换为8进制数输出——算法相关推荐

  1. 将M进制的数转换为N进制的数(java)

    package Four; import java.math.BigInteger; /** 进制转换* 题目描述* 将M进制的数转换为N进制的数* 输入的第一行包括两个整数M,N(M>=2,N ...

  2. 10进制数转换为36进制数

    10进制转换为36进制 如何将一个10进制数转换为36进制数? 主要思路:首先对十进制数取36的余数,第一次取余得到36进制数的个位,把这个数存到数组末尾作为个位:第二次用原来的数减去余数再取余可得到 ...

  3. 用栈实现将十进制数转换为任意进制数(2,8,16...).

    解题思路:假如N为输入的数,n为要转换为的进制,若要将十进制231转换为8进制数,过程如下; N                        N/n                      N%n ...

  4. 数据处理:16进制补码 转换为 10进制数值

    此功能仅为各位兄弟姐妹提供算法思路,由于功能简单直接上代码. 1. 16进制数值直接转换10进制 int HexToInt16_Complemwnt(unsigned char* data, int ...

  5. 进制转换(m 进制 x 转换为 n 进制的数)

    摘要:以前写的进制转换一般不会考虑大数问题,举个例子就是如果16进制的FFFFFFFFF就是16^9是一个非常大的数,这个时候就需要用数组来存. 题目: 将M进制的数X转换为N进制的数输出. 输入 输 ...

  6. 任意N进制数 转换为M进制数

    #include <stdio.h> #include <string.h>int NTOD(char *nn,int n) //先转换为十进制 使用位权 {int sum=0 ...

  7. Qt Excel表格列数转换为26进制字母表示

    Excel表格的列数是用26进制A1.B2.C3.D4-.Z26.AA27.AB28.AC29..表示的,为程序处理方便,第29列可表示为AC,十进制数转换为字符串的代码如下: QString Con ...

  8. PowerBuilder实现16进制字符串转换为10进制字符串

    1.该问题困扰了我很久(主要还是基础不牢). 实现原理:将16进制字符串转换为二进制字符串再去计算. 然后利用二进制的性质(逢二进一)进行转换为10进制. 废话不多说,上代码了. 在这里插入代码片 C ...

  9. ACM将一个十进制的数转换为一个十六进制的数输出

    Description 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示. Input 每行一个整数x,0<= x <= 2^31. Output 每行输出对应的 ...

最新文章

  1. 历届奥运会中国金牌数
  2. php查询sql2008数据库操作系统,使用 PHP 进行查询 - Azure SQL Database SQL Managed Instance | Microsoft Docs...
  3. 【转】小周立波张冯喜引爆达人秀 小童星家居照大曝光
  4. 计算机与自动化专业有哪些学校,全国自动化专业大学排名
  5. 三大开源生信基础教程(bookdown编写,源码可作为模板)和视频课程
  6. BZOJ1305 [CQOI2009]dance跳舞 【网络流】
  7. 拓端tecdat|excel数据分析——贝叶斯分析预测
  8. php算法结构,PHP中常用算法以及数据结构
  9. 百度世界大会全新打开方式!VR会场“希壤”上线
  10. 安卓3G控制板、核心板、广告机开发一体规格书
  11. Vim编辑器的使用之替换
  12. 加息+四巫日铁矿石大跌,棕榈油认沽最高30倍,豆一09-01继续反套2022.6.15
  13. Uber Go 语言编程规范:使用 go.uber.org/atomic
  14. 玫瑰c语言程序教程,c语言如何实现玫瑰花
  15. STM32CubeMX实战TFT_LCD液晶显示-探索者专用(转发)
  16. 数据结构初阶——链式二叉树
  17. C#操作Word文档
  18. 会签是什么,何时使用会签,如何设计使用会签
  19. 江西计算机一级b考试,江西省计算机B一级考试试题.doc
  20. 解决报错【internal/modules/cjs/loader.js:905 throw err;】

热门文章

  1. 马斯克公开支持上班“摸鱼”,允许员工坐班听音乐,还可外放
  2. 2018年10月7日英语学习
  3. 2014年新年新气象
  4. 国家一级保护动物的图像数据集
  5. IE浏览器缓存问题解决方法整理
  6. 帝国站长php主动推送,帝国cms百度主动推送的教程
  7. Guava(瓜娃)使用笔记
  8. php 剪头,【家园】剪头(散文)
  9. vue+xlsx实现表格的导入导出:
  10. mac terminal 常用快捷键