• 16进制转化8进制---map


    #include "stdio.h"
    #include "string.h"
    #include "string"
    #include "iostream"
    #include "math.h"
    #include "map"
    #include "queue"
    #include "malloc.h"
    using namespace std;
    map<char,string> mp;
    
    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 a;
        char test[100005];
        cin >> a;
        while(a--)
        {
            
            memset(test,0,sizeof(test));
            string b="";
            cin>>test;
            for(int i = 0;i < strlen(test);i++)
            {
                b += mp[test[i]];
            }
            int len = b.length();
            if(len%3==1)
                b = "00" + b;  
            else if(len%3==2)  
                b = "0" + b;
            int flag = 0;
            for(int i = 0 ;i < b.length(); i = i + 3)
            {
                int num = 4*(b[i]-'0')+2*(b[i+1]-'0')+(b[i+2]-'0');
                if(num)
                    flag = 1;
                if(flag)
                    cout<<num;
                
            }
            cout<<endl;
        }
        return 0;
    }

    但是这个跑在蓝桥杯的题目中会超时,因为map查询是对数时间复杂度放在循环中会超时

    更改map后通过

    #include "stdio.h"
    #include "string.h"
    #include "string"
    #include "iostream"
    #include "math.h"
    #include "map"
    #include "queue"
    using namespace std;
    map<char,string> mp;
    
    int main()
    {
        int a;
        string test;
        cin >> a;
        while(a--)
        {
            string b="";
            cin>>test;
            for(int i=0;i<test.length();i++)//遍历,字符串上加上每一位  
            {  
                switch(test[i])  
                {  
                    case '0':b+="0000";break;  
                    case '1':b+="0001";break;  
                    case '2':b+="0010";break;  
                    case '3':b+="0011";break;  
                    case '4':b+="0100";break;  
                    case '5':b+="0101";break;  
                    case '6':b+="0110";break;  
                    case '7':b+="0111";break;  
                    case '8':b+="1000";break;  
                    case '9':b+="1001";break;  
                    case 'A':b+="1010";break;  
                    case 'B':b+="1011";break;  
                    case 'C':b+="1100";break;  
                    case 'D':b+="1101";break;  
                    case 'E':b+="1110";break;  
                    case 'F':b+="1111";break;  
                    default:break;  
                }  
            }  
            int len = b.length();
            if(len%3==1)
                b = "00" + b;  
            else if(len%3==2)  
                b = "0" + b;
            int flag = 0;
            for(int i = 0 ;i < b.length(); i = i + 3)
            {
                int num = 4*(b[i]-'0')+2*(b[i+1]-'0')+(b[i+2]-'0');
                if(num)
                    flag = 1;
                if(flag)
                    cout<<num;
            }
            cout<<endl;
        }
    
        return 0;
    }
  • 相关阅读:
    .NET Framework 1.13.5 版本安装包下载链接
    可遇不可求的Question之MYSQL获取自增ID的四种方法篇
    20110917 晴
    北海道 7天6夜 自助游
    想你了
    猫忘带电话了
    [转载经验] 探亲签证申请
    帮忙打印
    打印机
    20110910 晴
  • 原文地址:https://www.cnblogs.com/cc-xiao5/p/8567075.html
Copyright © 2020-2023  润新知