1155: 5202 二进制转化为十六进制

这篇文章展示了一个C++程序,用于将输入的2进制数(以字符串形式给出)转换成16进制表示。程序首先创建了一个字符串数组,存储了2进制到16进制的映射,然后通过处理输入字符串的长度对齐到4位,并查找映射表进行转换。最后输出转换后的16进制数。
摘要由CSDN通过智能技术生成

题目描述

输入一个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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值