• 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;
    }
  • 相关阅读:
    微信获取openid过滤黑名单_写入文件_多协程版5500条10几秒
    微信获取openid写入文件golang版_golang获取微信openid写入文件
    go开发桌面应用源码_go Socket_golang Socket_golang开发桌面应用源码_go客户端服务端
    go常用代码片段_golang常用代码
    go基本语法_golang基本语法
    Java常用集合-List(ArrayList、Vector和LinkedList)简介
    mysql sql 将性别1和2转换成女和男
    支付宝当面付Demo测试
    PageResult
    返回结果
  • 原文地址:https://www.cnblogs.com/ACM-Epoch/p/13671681.html
Copyright © 2020-2023  润新知