全部题解详见这里
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
string a,b;
cin>>a;
for(int i=0;i<a.length();i++){
switch (a[i])
{
case '0': b+="0000"; break;
case '1': b+="0001"; break;
case '2': b+="0010"; break;
case '3': b+="0011"; break;
case '4': b+="0100"; break;
case '5': b+="0101"; break;
case '6': b+="0110"; break;
case '7': b+="0111"; break;
case '8': b+="1000"; break;
case '9': b+="1001"; break;
case 'A': b+="1010"; break;
case 'B': b+="1011"; break;
case 'C': b+="1100"; break;
case 'D': b+="1101"; break;
case 'E': b+="1110"; break;
case 'F': b+="1111"; break;
//c++中字符串拼接
default:
break;
}
}
int len=b.length();
if(len%3==1) //三个二进制为一位八进制,二进制串前面补0,确保二进制串的长度为3的倍数
b="00"+b;
if(len%3==2)
b="0"+b;
int flag=0;
for(int i=0;i<b.length();i+=3){
int num=4*(b[i]-'0')+2*(b[i+1]-'0')+(b[i+2]-'0');
if(num){
flag=1;
}
if(flag){
cout<<num;
}
}
cout<<endl;
}
return 0;
}