16进制转8进制

16进制转8进制 的算法:先把16进制转为2进制,再将2进制转为8进制

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int n;
    string a,b,c;//分别表示16,2,8进制的数
    cin>>n;
    while(n--)
    {
        a="",b="",c="";
        cin>>a;
        for(int i=0;i<a.size();i++)
        {
            switch(a[i])
            {
                case '0':b+="0000";break;
                case '1':b+="0001";break;
                case '2':b+="0010";break;
                case '3':b+="0011";break;
                case '4':b+="0100";break;
                case '5':b+="0101";break;
                case '6':b+="0110";break;
                case '7':b+="0111";break;
                case '8':b+="1000";break;
                case '9':b+="1001";break;
                case 'A':b+="1010";break;
                case 'B':b+="1011";break;
                case 'C':b+="1100";break;
                case 'D':b+="1101";break;
                case 'E':b+="1110";break;
                case 'F':b+="1111";break;
                default:break;
            }
        }//将16进制的数a存储在2进制数b中
        //二进制数转8进制数前先补0位
        if((b.size()%3)==1)
            b.insert(0,"00");
        else if((b.size()%3)==2)
            b.insert(0,"0");
        int n_eight;//先暂存8进制的数
        for(int i=0;i<b.size();i+=3)//2进制数b转8进制数c
        {
            n_eight=4*(b[i]-'0')+2*(b[i+1]-'0')+(b[i+2]-'0');
            c+=(n_eight+'0');
        }
        //判断8进制数中第一位是否为0
        for(int i=0;i<c.size();i++)
        {
            while(c[i]=='0')
                i++;
            cout<<c[i];
        }
        cout<<endl;
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/weixin_39924920/article/details/79717860