进制间的转换还需加深思考!
#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")