• 十六进制转换为八进制


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

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

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

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

    样例输入
      2
      39
      123ABC

    样例输出
      71
      4435274

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

    #include<iostream>
    using namespace std;
    int main()
    {
        int n;
        cin>>n;
        for(int i=0;i<n;++i)
        {
            string str,str2="",str8="";    
            cin>>str;
            int len=str.length();
            for(int j=0;j<len;++j)
            {
                switch(str[j])
                {
                    case '0' : str2+="0000";break;
                    case '1' : str2+="0001";break;
                    case '2' : str2+="0010";break;
                    case '3' : str2+="0011";break;
                    case '4' : str2+="0100";break;
                    case '5' : str2+="0101";break;
                    case '6' : str2+="0110";break;
                    case '7' : str2+="0111";break;
                    case '8' : str2+="1000";break;
                    case '9' : str2+="1001";break;
                    case 'A' : str2+="1010";break;
                    case 'B' : str2+="1011";break;
                    case 'C' : str2+="1100";break;
                    case 'D' : str2+="1101";break;
                    case 'E' : str2+="1110";break;
                    case 'F' : str2+="1111";break;
                }    
            }
            int len2=str2.length();
            if(len2%3==1) 
            {
                str2="00"+str2;
                len2+=2;
            } 
            else if(len2%3==2)
            {
                str2="0"+str2;
                ++len2;
            }
            for(int j=0;j<len2-2;j+=3)
            {
                int s8=(str2[j]-'0')*4+(str2[j+1]-'0')*2+str2[j+2]-'0';
                str8+='0'+s8;
            }
            int p=0;
            while(str8[p]=='0') ++p;
            int len8=str8.length();
            for(int j=p;j<len8;++j)
            {
                cout<<str8[j];
            }
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    [C4] 前馈神经网络(Feedforward Neural Network)
    [C3] 正则化(Regularization)
    [C2] 逻辑回归(Logistic Regression)
    [C1] 线性回归(Linear Regression)
    Python基础学习
    装饰器
    完全理解Python迭代对象、迭代器、生成器
    django自己搭建的博客
    git学习,哇瑟说实话我想要的
    类继承和多态,子类重写构造函数,多重继承学习
  • 原文地址:https://www.cnblogs.com/Cnxz/p/12736908.html
Copyright © 2020-2023  润新知