二进制转化为十六进制

二进制转化为十六进制

时间限制: 3 Sec   内存限制: 64 MB
提交: 433   解决: 45
[ 提交][ 状态][ 讨论版]

题目描述

输入一个2进制的数,要求输出该2进制数的16进制表示。 在16进制的表示中,A-F表示10-15

输入

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个以0和1组成的字符串,字符串长度至少是1,至多是10000

输出

n行,每行输出对应一个输入。 输出没有前导的0。

样例输入

2100000111

样例输出

207

提示

来源

百练2798,测试数据 by 09游戏张文君

这题的实现不难,只是要注意一下变态的数据,输入00000时应该输出0,要是漏了这步就会变为00就会Wa。

二进制化十六进制直接拿二进制的四位就是十六进制的一位。

AC代码:

#include <iostream> 
#include <cstring>
using namespace std; 
const int t=20000000; 
char a[t],b[t]; 
int val(int j)
{
	int sum=0,k=j-4;
	if(j-4<0)k=0;//相当于不够四位的补位操作
	for (int i=k;i<j;i++) //二进制四位转十进制的数
	{ 
		if (a[i]=='0') 
		{ 
			sum*=2; 
		}  
		else
		{ 
			sum=sum*2+a[i]-'0'; 
		} 
	} 
	return sum;
}
int main() 
{ 
	int n=2,tt,m=15,i,j,len,f; 
	cin >> f;
	cin.get();
	while(f--)
	{
		cin.getline(a,t);
		len=strlen(a);
		j=0;
		while(len>=4)
		{
			tt=val(len);
			if(tt>=0&&tt<=9)//转十六进制
				b[j++]=tt+'0';
			else
				b[j++]=tt+55;
			len-=4;
		}
		if(len)//还有小于四位的二进制数
			b[j++]=val(len)+'0';
		len=j-1;
		while(b[len]=='0'&&len>0)//排除多个0的情况
		{
			len--;
		}
		for(i=len;i>=0;--i)
		{
			cout << b[i];
		}
		cout << endl;
	}
	return 0; 
} 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值