Description
给定一个二进制表示的非负整数,将其转换为十六进制数。
Input
输入数据有多组,第一行为数据的组数T,接下来有T组数据。
每组数据占一行,每行为一个二进制整数(不含多余的前导0),最多1000位。
Output
输出对应的十六进制数,字母用大写表示。
Sample Input
2 1111 10100100
Sample Output
F A4
#include<stdio.h>
#include<string.h>
char s[1010];
int a[1010];
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
memset(a,0,sizeof(a));
memset(s,0,sizeof(s));
int q=0;
scanf("%s",s);
int len=strlen(s);
int d=len%4;
for(int i=len-4;i>=d;i=i-4)
{
a[q]=(s[i]-48)*8+(s[i+1]-48)*4+(s[i+2]-48)*2+(s[i+3]-48)*1;
q++;
}
if(d>=1&&d<=3)
{
if(d==1)
{
a[q]=s[d-1]-48;
}
else if(d==2)
{
a[q]=(s[d-2]-48)*2+(s[d-1]-48)*1;
}
else if(d==3)
{
a[q]=(s[d-1]-48)*1+(s[d-2]-48)*2+(s[d-3]-48)*4;
}
}
else q--;
for(;q>=0;q--)
{
if(a[q]>9) printf("%c",a[q]+'A'-10);
else printf("%d",a[q]);
}
printf("\n");
}
}
return 0;
}