进制间的转换还需加深思考!
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
char change(char ch){
int num = -1;
if(ch >= '0' && ch <= '9') //数字
num = ch - '0';
else if( (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')) //字母
num = tolower(ch) - 'a' + 10; //十六进制字母转为十进制数
if(num != -1){ //非数字或者字母num还是为-1
int bit[4]; // 16以内,4位
for(int i = 0; i < 4; i++){
bit[i] = num % 2; // 从下标0开始存,已经反转了
num /= 2;
}
num = bit[0] * 8 + bit[1] * 4 + bit[2] * 2 + bit[3] * 1; // 这个数的范围是在0-16之间,用16进制表示它
if(num <= 9 && num >= 0) //转回十六进制数的字符
ch = num + '0';
else if (num >= 10 && num <= 16)
ch = num - 10 + 'A';
}
return ch;
}
int main() {
string s1,s2,s;
cin>>s1>>s2;
s=s1+s2;
string even,odd;
for(int i=0;i<s.size();i++){
if(i%2==0)
even+=s[i];
else
odd+=s[i];
}
sort(even.begin(), even.end()); //奇数位字符排序
sort(odd.begin(), odd.end()); //偶数位字符排序
int j=0;
for(int i=0;i<s.size();i++){
if(i%2==0)
s[i]=even[j];
else
s[i]=odd[j++];
}
for(int i = 0; i < s.length(); i++) //遍历字符串
s[i] = change(s[i]);
cout << s << endl;
return 0;
}
// 64 位输出请用 printf("%lld")



京公网安备 11010502036488号