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;
    }
  • 相关阅读:
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 133 克隆图
  • 原文地址:https://www.cnblogs.com/ACM-Epoch/p/13671681.html
Copyright © 2011-2022 走看看