zoukankan      html  css  js  c++  java
  • 十六进制转换为八进制

    问题描述
      给定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;
    }
  • 相关阅读:
    iOS 将对象的属性和属性值拆分成key、value,通过字符串key来获取该属性的值
    [IOI2005] Riv 河流
    [洛谷P4549] [模板] 裴蜀定理
    [NOIp2013] 货车运输
    [NOIp2015] 运输计划
    18.10.01模拟赛总结
    [洛谷P3369] 普通平衡树 Treap & Splay
    [NOIp2016] 组合数问题
    [洛谷P4777] [模板] 扩展中国剩余定理
    [洛谷P3384] [模板] 树链剖分
  • 原文地址:https://www.cnblogs.com/Cnxz/p/12736908.html
Copyright © 2011-2022 走看看