二进制数据是用 0 和 1 两个数码来表示的数.它的基数为 2 ,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现.
十六进制(简写为hex或下标 16 )在数学中是一种逢 16 进 1 的进位制.一般用数字 0 到 9 和字母 A 到 F(或 a ~ f )表示,其中: a ~ f 表示 10 ~ 15 ,这些称作十六进制数字.
请将给定的二进制数转为十六进制数,英文字母使用小写形式.
输入
第一行一个正整数 T, 代表有 T 组测试数据. (1≤T≤10).
接下来 T 行,每行输入一串只包含 0
和 1
的字符串(无前导 0),字符串长度:1≤length≤106.
输出
对于每组测试样例,输出转化后的十六进制数并单独占一行.
Input
2
1
10
Output
1
2
#include<stdio.h>
#include<string.h>
int main()
{
int t,i,len;
scanf("%d",&t);
while(t--)
{
char str[1000000],b[1000000];
scanf("%s",str);
len=strlen(str);
int j=0,cnt=0,temp=1,ans=0;
for(i=len-1;i>=0;i--)
{
ans+=temp*(str[i]-'0');
temp*=2;
cnt++;
if(cnt==4)
{
if(ans>=10)
b[j++]=ans-10+'a';
else
b[j++]=ans+'0';
temp=1;
ans=0;
cnt=0;
}
}
if(cnt)//处理不足四位的字符
{
if(ans>=10)
b[j++]=ans-10+'a';
else
b[j++]=ans+'0';
}
for(i=j-1;i>=0;i--)
printf("%c",b[i]);
printf("\n");
}
return 0;
}
例如:1010
0*1+1*2+0*4+1*8