题解 | #字符串合并处理#

字符串合并处理

https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f

题目描述不准确,没提出了a到f的字母怎么处理。

十进制转成二进制按四个一组看就是十六进制

#include <bitset>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <map>
using namespace std;
map<char,int> mp;
char work(char in){
    int in1=mp[in];
    bitset<4> bs(in1);
    string s{bs.to_string()};
    reverse(s.begin(), s.end());
    int i=stoi(s,nullptr,2);//2:s是二进制数,返回十进制数
    // cout<<i<<endl;
    if (i < 10) {
        return i + '0';
    } else {
        return i + 'A' - 10;
    }
}

int main() {
    string in1,in2;
    cin>>in1>>in2;
    string a,a1,a2;
    a=in1+in2;
    for(int i=0;i<a.length();i++){
        if(i%2==0){
            a1+=a[i];
        }
        else{
            a2+=a[i];
        }
    }
    // cout<<a1<<endl;
    // cout<<a2<<endl;
    // cout<<a<<endl;
    sort(a1.begin(),a1.end());
    sort(a2.begin(),a2.end());
    string b;//已经合并
    for(int i=0;i<a.length();i++){
        if(i%2==0 && i/2<a1.length()){
            b+=a1[i/2];
        }
        else if(i%2==1 && i/2<a2.length()){
            b+=a2[i/2];
        }
    }
    // cout<<a1<<endl;
    // cout<<a2<<endl;
    // cout<<b<<endl;
    for(int i=0;i<10;i++){
        mp['0'+i]=i;
    }
    for(int i=0;i<6;i++){
        mp['a'+i]=10+i;
        mp['A'+i]=10+i;
    }
    for(auto i:b){
        if(i>='0'&&i<='9' || i>='a'&&i<='f' || i>='A'&&i<='F'){
            cout<<work(i);
        }
        else{
            cout<<i;
        }
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

牛客29046817...:优化一下简历,突出重点,简历上的技能复习扎实,实习工作啥的整理成文档梳理一下怎么说要有自己的思考在里边,岗位的话运维,测试,开发,实施,技术支持能投的都投,多投递能找到的,秋招投递了3个月左右(8月中旬到11月下旬),boos打招呼8000多次,官网投递300多家,才找到一家满意的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务