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