码迷,mamicode.com
首页 > 其他好文 > 详细

十六进制转八进制

时间:2019-01-24 00:20:01      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:i++   正整数   pac   bst   style   十六   输入   十六进制   长度   

问题描述
  给定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;
}

 

十六进制转八进制

标签:i++   正整数   pac   bst   style   十六   输入   十六进制   长度   

原文地址:https://www.cnblogs.com/woxiaosade/p/10312064.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!