十六进制转八进制

Posted woxiaosade

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十六进制转八进制相关的知识,希望对你有一定的参考价值。

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

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

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

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

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

题解

  解题操之过急,未把各种情况考虑清楚,修改了很久,希望不要再这样。

#include <iostream>
#include <cstdio>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <stdlib.h>
#include <string.h>
#include <cmath>
#include <string>
#include <fstream>
using namespace std;

int main(){
    int n;
    string str[10];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        cin>>str[i];
        string bin;
        string oct;
        for(int j=0;j<str[i].length();j++){
            switch(str[i][j]){
                case 0:bin+="0000";break;
                case 1:bin+="0001";break;
                case 2:bin+="0010";break;
                case 3:bin+="0011";break;
                case 4:bin+="0100";break;
                case 5:bin+="0101";break;
                case 6:bin+="0110";break;
                case 7:bin+="0111";break;
                case 8:bin+="1000";break;
                case 9:bin+="1001";break;
                case A:bin+="1010";break;
                case B:bin+="1011";break;
                case C:bin+="1100";break;
                case D:bin+="1101";break;
                case E:bin+="1110";break;
                case F:bin+="1111";break;
            }
        }
        int leng = bin.length() % 3;
        if(leng != 0){
            string t = bin.substr(0,leng);
            if(t == "1")
                oct += "1";
            else if (t == "10")
                oct += "2";
            else if (t == "11")
                oct += "3";
            else if(t=="01")
                oct += "1"; 
        }
        if(bin.substr(leng,3) == "000")
            leng+=3; 
        for(long long j = leng;j<bin.length();j+=3){
            string t = bin.substr(j,3);
            if(t == "000")
                oct += "0";
            else if (t == "001")
                oct += "1";
            else if(t == "010")
                oct += "2";
            else if(t =="011")
                oct += "3";
            else if(t =="100")
                oct += "4";
            else if(t =="101")
                oct += "5";
            else if(t == "110")
                oct += "6";
            else if(t== "111")
                oct += "7";
        }
        cout<<oct<<endl;
    }
    return 0;
}

 

以上是关于十六进制转八进制的主要内容,如果未能解决你的问题,请参考以下文章

粉红色十进制RGB代码和十六进制RGB代码

求一个10进制转十六进制的vb代码,要支持非常大的数的(30位)

求十进制转换二进制C语言代码

android 常用的代码

python十进制转二进制代码

16进制转10进制编程