百练 2798:2进制转化为16进制

http://bailian.openjudge.cn/practice/2798/


#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、付费专栏及课程。

余额充值