您的位置:首页 > 编程语言 > C语言/C++

蓝桥杯基础练习16进制转换成8进制

2017-12-30 14:36 183 查看
  基础练习 十六进制转十进制  

时间限制:1.0s   内存限制:512.0MB
      

问题描述

  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。

  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

样例输入

FFFF

样例输出

65535

技巧先将16进制转换成2进制,在将二进制转换成8进制;

#include <iostream>

#include <string>

using namespace std;

int main()

{

    string s1;

    string s2;

    int n;

    cin>>n;

    while(n--)

    {s2="";

        cin>>s1;

    int s,x=0;

    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;

     }

    }if(s2.length()%3==1)

    {

        s2="00"+s2;

    }

    else if(s2.length()%3==2)

    {

        s2='0'+s2;

    }

    for(int i=0;i<s2.length();i+=3)

    {

        s=(s2[i]-'0')*4+(s2[i+1]-'0')*2+(s2[i+2]-'0');

        if(s)

            x=1;//此处是防止出现前导0;

        if(x)

            cout<<s;

    }

    cout<<endl;

    }

    return 0;
}

16进制转换成2进制   16进制每个数都可以换成4位数的二进制

二进制转换成为8进制是   3个数一体    例如 1 001 111  这个二进制转换成为8进制是    1*4+1*2+1=7;0*4+0*2+1=1;1*1=1;呢么这个数为117;

二进制到16进制也是这样转换   只不过需要  的是*1  *2 *4 *8;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++