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

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

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

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

样例输入   2   39   123ABC

样例输出   71   4435274

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

先转二进制在转8进制

#include<iostream>
#include<cstring>
using namespace std;
int main()
{string hex[10];     //表示16进制数string bin[10];     //表示2进制数string oct[10];      //表示8进制数int n;cin>>n;for(int i=0;i<n;i++){cin>>hex[i];      //输入几个16进制数}//16进制转2进制for(int i=0;i<n;i++)     //遍历每一个16进制数{for(int j=0;j<hex[i].length();j++)   //便利每一个16进制数的每一位{switch(hex[i][j])              //将每一位16进制转换成二进制{                               //将从0-F的所有的16进制对应的二进制的转换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;                //转成8进制后的值得大小int temp = 3;                //8进制以3位二进制表示。for(int j=len-1;j>=0;j--)     //从每一个转换后的二进制的最后以为开始便利{if(bin[i][j] == '1')      //当二进制有1的时候每一位对应的值相加{switch(temp)         //从转换后二进制数的每一位开始从右到左{case 3: num +=1;break;case 2: num +=2;break;case 1: num +=4;break;default:break;}}temp--;           if(temp == 0)  //判断当三位遍历完后将另外三位对应的值和对应的三位二进制的位数置为0{                    oct[i] += num + '0';
/*转换后的数值放入8进制的字符数组内并在后面接0为了让下一位的值能够对应上如39 对应的是 00 111 001    001对应的是1则 oct字符数组中放10 等下一组为 7时则为170*/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');  //当首位为0的话往后走一位for(--j;j<len;j++)          //从0开始遍历{cout<<oct[i][j];}cout<<endl;       //换行}return 0;
}

先转10进制在转8进制

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
long long change(char );
int convert(long long n)
{long long  temp;if(n==0){return 0;}else{temp=n%8;  //入栈 6 2 2n=n/8;     //18 2 0convert(n); //出栈 2 2 6    递归printf("%lld",temp);}return 0;
}
int main(){char a[10];long long i,n,sum=0,temp;scanf("%s",a);n = strlen(a);for(i=0;i<n;i++){temp=change(a[i]);sum=sum+temp*pow(16,n-1-i);    //先输入的是最高位,即a[0]是高位,a[n-1]是低位}convert(sum);
}
long long change(char x){switch(x){case '0':return 0;case '1':return 1;case '2':return 2;case '3':return 3;case '4':return 4;case '5':return 5;case '6':return 6;case '7':return 7;case '8':return 8;case '9':return 9;case 'A':return 10;case 'B':return 11;case 'C':return 12;case 'D':return 13;case 'E':return 14;case 'F':return 15;}
}

16进制转8进制 两种方法先转二进制在转8进制或先转10进制在转8进制相关推荐

  1. 使用 MSU StegoVideo 将信息隐藏进 AVI 视频文件中(两种方法 + 详细图文过程)

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=1305 环境部署 操作系统: Windows 7 专业版 64位 软件: 下载 MSU StegoVideo 下载地 ...

  2. .NET生成常用16、32位MD5加密的两种方法

    //MD5加密函数比较复杂,在.NET中我们不需要编写底层的算法. //平台已经提供两个生成MD5加密的方法: //经过改动一点就可以生成如现在DVBBS等论坛中使用的MD5密码 //⑴:使用C:\W ...

  3. mysql+数据库连接标识_新人必看!连接到MySQL数据库的两种方法

    原标题:新人必看!连接到MySQL数据库的两种方法 使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysq ...

  4. 华硕主板无盘启动bios设置_最新华硕主板进BIOS设置U盘启动的两种方法

    华硕这家台湾企业在主板领域一直是处于领头羊的地位,旗下的主板以质量优异获得大量用户的青睐.下面小编就讲讲最新华硕主板如何进bios设置u盘启动,在此介绍两种方法. 方法一:利用启动热键快速设置 1.开 ...

  5. 进Linux系统单用户模式,Linux进入单用户模式的两种方法

    单用户模式的作用 在使用Linux系统中,维护人员经常会碰到一个问题,就是在拥有root账号权限和密码的用户中,总是会出现忘记root密码的情况. 遇到这种情况,一般情况下,维护人员就会通过最常用的方 ...

  6. 站长在线Python精讲:在Python中格式化字符串的两种方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...

  7. html背景颜色透明度hex,CSS背景颜色设置透明度的两种方法(8位hex和rgba)

    目录 一. 6位HEX转RGBA 二.8位HEX 在写微信小程序的时候,有个需求是按背景颜色 background-color要设透明度0.85,让背景图片 background-image透一点出来 ...

  8. Java生成二维码的两种方法

    本文介绍Java生成二维码的两种方法,这两种方法都依赖于google提供的二维码依赖包. 一种是自己写工具类,代码可以网上抄. 另一种是使用hutool第三方工具类的依赖包,不用自己抄代码. 一.自定 ...

  9. VB 两种方法实现热键

    方法一: Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Intege ...

最新文章

  1. 性能调优-SQL TRACE
  2. yolov5做情感识别
  3. Django--filter()-字段查找(双下划线的使用详解)
  4. 从 2015 年起的未来五年内有哪些创业方向 | PMcaff-产品
  5. 演练:创建和使用静态库 (C++)
  6. 【jQuery小实例】---2自定义动画
  7. Kubernetes APIServer机制概述
  8. Hyper-V 2016 系列教程40 使用 PowerShell 实现虚拟机自动化和管理虚拟机
  9. WebRTC中码率限制参数使用及sdp中参数使用流程
  10. 双机流水作业调度问题——Johnson算法
  11. AutoCAD工程制图 常见命令与注意事项全总结(120例)
  12. 华东理工大学本科毕业论文答辩和论文选题PPT模板
  13. oracle创建自增序列
  14. matlab图形黎曼几何,黎曼几何不一致的定理—元数学与元物理学(22)
  15. java 基于微信小程序的饭店外卖点餐系统 uniapp小程序
  16. 线性代数中解方程组的加减消元和求特征向量的加减消元的区别
  17. Simplest NodeJS server
  18. exoplayer的media2扩展
  19. uni-app 快手小程序如何设置跟元素样式
  20. 社群空间站一键发布微信群精品优质社群的搜索和发布平台源码

热门文章

  1. CVPR 2018摘要:第二部分
  2. JavaWeb之JavaMail使用
  3. word写论文时标题与页面顶端的距离和设定不一样的问题
  4. jQuery循环赋值 取值
  5. Quartu仿真D触发器并验证
  6. 获取两个List集合中的不相同的对象
  7. 如何解决三星S10e美版系统无法跳过Android设置向导的问题
  8. charles端口被占用处理方法
  9. android jmdns,Android异常:’java.lang.NoClassDefFoundError:javax.jmdns.JmDNS’
  10. java编程中/和\的用法区别