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


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

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

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

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

    样例输入
      2
      39
      123ABC

    样例输出
      71
      4435274

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

    #include  <iostream>
    #include <string>
    #include <cmath>
    using namespace std;
    
    string str2;
    
    int main() {
        int n;
        cin >> n;
        
        for (int k = 0; k < n; k++) {
            string str;
            cin >> str, cin.get();
            for (int i = 0; i <= str.size(); i++) {
               
                switch (str[i])
                {
                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;
                }
            }
            //去掉前面的0
            int i = 0;
            while (str2[i] == '0')
            {
                i++;
            }
            str2.erase(str2.begin(), str2.begin() + i);
        
            int j = 0;
            while (j < str2.size()) {
    
                if (j == 0 && str2.size() % 3 != 0) i = str2.size() % 3 - 1;
                else i = 2;
    
                int tmp = 0;
                for (; i >= 0; i--)
                    tmp += (str2[j++] - '0')*pow(2, i);
                cout << tmp;
            }
            cout << endl;
            str2.clear();
        }
        
    
        
    }

    2016-11-1016:14:59

    自己选的路,跪着也要把它走完------ACM坑
  • 相关阅读:
    【转载】poj 1276 Cash Machine 【凑钱数的问题】【枚举思路 或者 多重背包解决】
    一道蓝桥比赛的训练打印题【构造+不断的构造+构造规律】
    poj 1679 The Unique MST 【次小生成树+100的小数据量】
    poj 2828 Buy Tickets 【买票插队找位置 输出最后的位置序列+线段树】
    【转载】素数快速打表(据说是线性复杂度)
    HDU 1166 敌兵布阵 【线段树-点修改--计算区间和】
    yifan的数组
    Tempter of the Bone
    最短路
    排列2
  • 原文地址:https://www.cnblogs.com/IKnowYou0/p/6051362.html
Copyright © 2020-2023  润新知