十六进制转化为八进制

//

问题描述

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

输入格式

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

输出格式

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

注意

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

样例输入

2
39
123ABC

样例输出

71
4435274

思路:

先把16进制化为四个2进制数,然后三个二进制数一组再化为8进制。 注意 39(16进制)--〉0011    1001   (2进制) --〉111  001(8进制),是从二进制的低位开始三个一组来计算。

代码:

#include <iostream> 
#include <cstring> 
using namespace std; 
int main() 

    int n; 
    cin>>n; 
    for(int k=1;k<=n;k++) 
    { 
        string s1,s2;//s1为输入的原始的十六进制串,s2为转化成的二进制串 
        cin>>s1; 
        s2="";//初始化 
        for(int i=0;i<s1.length();i++)//遍历,字符串上加上每一位 
        { 
            switch(s1[i]) 
            { 
                case ‘0‘:s2+="0000";break; 
                case ‘1‘:s2+="0001";break; 
                case ‘2‘:s2+="0010";break; 
                case ‘3‘:s2+="0011";break; 
                case ‘4‘:s2+="0100";break; 
                case ‘5‘:s2+="0101";break; 
                case ‘6‘:s2+="0110";break; 
                case ‘7‘:s2+="0111";break; 
                case ‘8‘:s2+="1000";break; 
                case ‘9‘:s2+="1001";break; 
                case ‘A‘:s2+="1010";break; 
                case ‘B‘:s2+="1011";break; 
                case ‘C‘:s2+="1100";break; 
                case ‘D‘:s2+="1101";break; 
                case ‘E‘:s2+="1110";break; 
                case ‘F‘:s2+="1111";break; 
                default:break; 
            } 
        } 
        int len=s2.length();   
        if(len%3==1)//三个二进制为一位八进制,二进制串前面补0,确保二进制串的长度为3的倍数 
            s2="00"+s2; 
        else if(len%3==2) 
            s2="0"+s2; 
        int flag=0; 
        for(int i=0;i<=s2.length()-3;i+=3) 
        { 
            int num=4*(s2[i]-‘0‘)+2*(s2[i+1]-‘0‘)+(s2[i+2]-‘0‘); 
            if(num) 
                flag=1;//忽略前导0 
            if(flag) 
                cout<<num; 
        } 
        cout<<endl; 
    } 
    return 0; 
}

时间: 2024-11-03 03:45:31

十六进制转化为八进制的相关文章

蓝桥杯 十六进制转化为八进制

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

十进制转化为八进制

/*************************************************************************************** * 参数一: 被转换的10进制数 * 功 能: 十进制转化为八进制 * 返回值: 0 ****************************************************************************************/ int fnTenToEight(int nNum) {

十六进制转化为十进制

package lsh.element.numbersystem; import java.util.Scanner; /** * * @desc 有意思的地方:两种思想得到的结果都是正确的,但是超出int类型最大之后,错误值却不同 * * @author * LSH * 2018年9月23日 */ public class HexToDecimalConversion { public static void main(String[] args) { System.out.println((

经典算法题-十六进制转化十进制

使用Java写出一个程序:接受一个十六进制的数,输出该数值的十进制表示.(多组同时输入 ) import java.util.Scanner; public class number { private static final String A = "A"; private static final String B = "B"; private static final String C = "C"; private static final

16进制转二进制、八进制

' 用途:将二进制转化为八进制 ' 输入:Bin(二进制数) ' 输入数据类型:String ' 输出:BIN_to_OCT(八进制数) ' 输出数据类型:String ' 输入的最大数为2147483647个字符 Public Function BIN_to_OCT(ByVal Bin As String) As String Dim i As Long Dim H As String If Len(Bin) Mod 3 <> 0 Then Bin = String(3 - Len(Bin)

Python学习之路 第二篇 二进制及其相关转化

1.十进制和进制 十进制位权的理解: 12360=0*10(1-1)+6*10(2-1)+3*10(3-1)+2*10(4-1)+1*10(5-1)  (n-n)表示次方 2.二进制:二进制是计算机技术中广泛采用的一种数秩,是逢二进位的进位秩.0和1是基本算符.因为它使用0和1两个数字符号. 二进制转十进制: 110101011=2*(1-1)+2*(2-1)+0*(3-1)+2*(4-1)+0*(5-1)+2*(6-1)+0*(7-1)+2*(8-1)+2*(9-1)   (n-n)表示次方

随便练习的进制转换

十六进制转化为十进制 #include<stdio.h> #include<math.h> #include<string> #include<iostream> using namespace std; int main() { string s; cin>>s; int m=s.size(); long long sum=0; for(int i=0;i<s.size();i++) { switch(s[i]) { case 'F':

进制间的相互转化

原文:进制间的相互转化 进制间的转换如下图所示: 由上图可知,进制间共有12种转换.下面将逐一介绍这12种转换方法 (1)二进制转化为八进制 原理:<1>1位八进制数可以用3位二进制数码表示 <2>以小数点为边界:若小数点左侧(即整数部分)不是3的整数倍,则在最左侧补零,对小数点右侧(即小数部分)应在最右侧补零 例:   将(10.101)2 转化为八进制. 解:(1)将二进制补足3位 即:(010.101)2 (2)按权值转换 (0×22 + 1×21 +0×20).(1×22

VB 进制转换大全

'二进制转十进制 Public Function B2D(vBStr As String) As Long Dim vLen As Integer '串长 Dim vDec As Long '结果 Dim vG As Long '权值 Dim vI As Long '位数 Dim vTmp As String '临时串 Dim vN As Long '中间值 vLen = Len(vBStr) vG = 1 '初始权值 vDec = 0 '结果初值 B2D = vDec '返回初值 For vI