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

字符串合并处理

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

#include <algorithm>
#include <iostream>
#include <linux/limits.h>
#include <vector>
using namespace std;

int change(int num,int erjinzhi[])
{
    for(int j=0;j<4;j++)
            {
                erjinzhi[j]=num%2;
                num/=2;
            }
            for(int j=0;j<2;j++)
            {
                int k=erjinzhi[j];
                erjinzhi[j]=erjinzhi[3-j];
                erjinzhi[3-j]=k;
            }
            int w=1;
            for(int j=0;j<4;j++)
            {
                if(j!=0) w*=2;
                if(erjinzhi[j]==1)
                {
                    num+=w;
                }
            }
    return num;
}
int main() {
    string str1,str2;
    cin>>str1>>str2;
    vector<char> odds;
    vector<char> evens;
    string s;
    for(int i=0;i<str1.size()+str2.size();i++)
    {
        if(i<str1.size())
        {
            s.push_back(str1[i]);
        }
        else {
            s.push_back(str2[i-str1.size()]);
        }
        if(i%2)
        {
            odds.push_back(s[i]);
        }
        else evens.push_back(s[i]);
    }
    sort(odds.begin(), odds.end());
    sort(evens.begin(),evens.end());
    int erjinzhi[4];
    for(int i=0;i<s.size();i++)
    {
        if(i%2)
        {
            s[i]=odds[i/2];
        }
        else s[i]=evens[i/2];
        int num;
        if(s[i]>='0'&&s[i]<='9')
        {
            num=s[i]-'0'; 
        }
        else if(s[i]>='A'&&s[i]<='F')
        {
            num=s[i]-'A'+10;
        }
        else if(s[i]>='a'&&s[i]<='f')
        {
            num=s[i]-'a'+10;
        }
        else continue;
        num=change(num,erjinzhi);
        if(num>=0&&num<=9)
        {
            s[i]=num+'0';
        }
        else s[i]=num-10+'A';
    }
    cout<<s;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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