题解 | #字符串合并处理#
字符串合并处理
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")