蓝桥杯基础练习-十六进制转八进制

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

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

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

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

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

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

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
using namespace std;
///先16转2,再判断转换后的开头三个是否为0(16进制下1转换为2进制为0001),然后将2转换为8.
int main()
{
    int n;
    cin>>n;
    for(int i = 0; i < n; i++)
    {
        string str;
        cin>>str;
        string er;
        string eight;
        int len = str.length();
        for(int j = 0; j < len; j++)
        {
            switch(str[j])
            {
                case'0':er+="0000";break;
                case'1':er+="0001";break;
                case'2':er+="0010";break;
                case'3':er+="0011";break;
                case'4':er+="0100";break;
                case'5':er+="0101";break;
                case'6':er+="0110";break;
                case'7':er+="0111";break;
                case'8':er+="1000";break;
                case'9':er+="1001";break;
                case'A':er+="1010";break;
                case'B':er+="1011";break;
                case'C':er+="1100";break;
                case'D':er+="1101";break;
                case'E':er+="1110";break;
                case'F':er+="1111";break;
                default:break;
            }
        }

        int m = er.length()%3;
        if(m==1)er.insert(0,"00");
        if(m==2)er.insert(0,"0");

        int k = 0;
        if(er.substr(k,3)=="000")k+=3;
        for(int j = k; j < er.length(); j+=3)
        {
            string s = er.substr(j,3);
            if(s=="000")eight+='0';
            if(s=="001")eight+='1';
            if(s=="010")eight+='2';
            if(s=="011")eight+='3';
            if(s=="100")eight+='4';
            if(s=="101")eight+='5';
            if(s=="110")eight+='6';
            if(s=="111")eight+='7';
        }
        cout<<eight<<endl;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/wys5wys/article/details/88357045