题目描述
输入一个2进制的数,要求输出该2进制数的16进制表示。在16进制的表示中,A-F表示10-15。
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个以0和1组成的字符串,字符串长度至少是1,至多是10000。
输出
n行,每行输出对应一个输入。
样例输入 复制
2
100000
111
样例输出 复制
20
7
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main(){
int i,n;
string s[25];
for(i=0;i<25;i++)
s[i]=" ";
s[0]="0000";
s[1]="0001";
s[2]="0010";
s[3]="0011";
s[4]="0100";
s[5]="0101";
s[6]="0110";
s[7]="0111";
s[8]="1000";
s[9]="1001";
i='A'-'0';
s[i++]="1010";
s[i++]="1011";
s[i++]="1100";
s[i++]="1101";
s[i++]="1110";
s[i++]="1111";
cin>>n;
while(n--){
char a[10001];
cin>>a;
string str="";
int num = 0;
int len = strlen(a);
switch(len%4){
case 1:
str=str+"000"+a[0];
num=1;
break;
case 2:
str=str+"00"+a[0]+a[1];
num=2;
break;
case 3:
str=str+"0"+a[0]+a[1]+a[2];
num=3;
break;
case 4:
str=str+a[0]+a[1]+a[2]+a[3];
num=4;
break;
}
for(i=0;i<25;i++){
if(s[i]==str){
cout<<(char)(i+'0');
break;
}
}
for(i=num;i+3<len;i+=4){
str="";
for(int j=i;j<i+4;j++){
str+=a[j];
}
for(int k=0;k<25;k++){
if(s[k]==str){
cout<<(char)(k+'0');
break;
}
}
}
cout<<endl;
}
return 0;
}