zoukankan      html  css  js  c++  java
  • 16进制转2进制再转8进制

    蓝桥杯刷题计划,由于最大有十万位16进制数,所以直接选择整形是无法存储的,考虑到16进制,8进制,2进制之间的关系,所以我们选择,先转2进制,再有2进制转换为8进制。

    由于,一位16进制数对应4位2进制数,一位8进制数对应3位2进制数,于是,我们可以用先用Map进行一个映射存储,便于直接取用。

    另外注意map迭代器的使用方法,还有一个坑点在于如果16进制数转换为2进制字符串后,不是3的倍数,我们需要从高位开始,挨着补0。

    注意字符串可以使用push_back操作,但一次放入一个字符,采取字符串+=的方法,时间会比较复杂。

    最后,直接上代码:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    map<char, string> mp;
    map<string, char> mp2;
    int main() {
        mp['0'] = "0000";    mp['1'] = "0001";    mp['2'] = "0010";    mp['3'] = "0011";    mp['4'] = "0100";    mp['5'] = "0101";    mp['6'] = "0110";    mp['7'] = "0111";
        mp['8'] = "1000";    mp['9'] = "1001";    mp['A'] = "1010";    mp['B'] = "1011";    mp['C'] = "1100";    mp['D'] = "1101";    mp['E'] = "1110";    mp['F'] = "1111"; 
        int t;    cin >> t;
        while(t--) {
            string s = "", ans = "", end = "";    cin >> s;//ans代表十六进制转换为2进制,end代表2进制转换为8进制 
            for(int i = 0; i < s.size(); i++) {
                for(int j = 0; j < mp[s[i]].size(); j++) {
                    ans.push_back(mp[s[i]][j]);
                }
            }
            while(ans.size() % 3)    ans = "0" + ans;
            for(map<char, string>::iterator it = mp.begin(); it != mp.end(); it++) {
                if(it->first >= '8')    break;
                char val = it->first;
                string key = it->second.substr(1, 3);
                mp2[key] = val;
            }
            for(int i = 0; i < ans.size(); i += 3) {
                string temp = "";
                temp.push_back(ans[i]);
                temp.push_back(ans[i + 1]);
                temp.push_back(ans[i + 2]);
                end += mp2[temp];
            }
            for(int i = 0, flag = 0; i < end.size(); i++) {
                if(!flag && end[i] =='0')    continue;
                flag = 1;
                cout << end[i];
            }
            cout << endl;
        }
        return 0;
    }
  • 相关阅读:
    酒里放茶,醉,未遂。
    利用自定义事件实现不同窗体间的通讯 Delphi篇
    主题:CS0016: 未能写入输出文件“c:&#92;WINDOWS&#92;Microsoft.NET&#92;***.dll”错误处理
    delphi點擊窗體最小化,關閉按鈕時的托盤圖標設置
    delphi制作程序啟動歡迎窗體
    那年 那雪
    DOL魔盘解决方案
    专家解密“艳照门”背后三大安全陷阱
    jQuery获取Select选择的Text和 Value(转)
    技术列传 guava cache
  • 原文地址:https://www.cnblogs.com/ACM-Epoch/p/13671681.html
Copyright © 2011-2022 走看看