描述

输入一个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>
using namespace std;
const int maxn = 1e2+2;

int chr(char c){
    return c-'0';
}

char hy(int sum){
    if(sum<10) return char(sum+'0');
    else return char('A'+sum-10);
}

int main(){
    std::ios::sync_with_stdio(false);cin.tie(0);
    int n;
    cin>>n;
    string s1;
    while(n--){
        cin>>s1;
        int n=s1.length(),i=n%4,sum=0;
        if(n==1){
            cout<<s1<<'\n';
            continue;
        }
        for(int j=0;j<i;j++)sum=sum*2+chr(s1[j]);
        if(sum)cout<<hy(sum);
        for(;i<n;i+=4){
            sum=chr(s1[i])*8+chr(s1[i+1])*4+chr(s1[i+2])*2+chr(s1[i+3]);
            cout<<hy(sum);
        }
        cout<<"\n";
    }
    return 0;
}