1249: 【基础】二进制转十六进制(1294)

内存限制:16 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:5 解决:5

题目描述

请将一个不超过100位的二进制数转换为十六进制数!

输入

一个不超过100位的二进制整数

输出

该数对应的十六进制数!

样例输入 复制

11001001111011111000001000010011

样例输出 复制

C9EF8213

提示

#include<bits/stdc++.h>
using namespace std;
//将4位的2进制转换位1位的16进制 
char num(string s) {
	//1101,从最低位开始按权展开,转换位10进制 
	//再转换为16进制的字符 
	int r=0,i,t=1;
	for(i=s.size()-1;i>=0;i--) {
		r=r+(s[i]-'0')*t;
		t=t*2;
	}
	char c;
	if(r<10) {
		c=r+'0';
	}else{
		c=r+'A'-10;
	}
	return c;
}
int main(){
    string s,t; //存放二进制 
    cin>>s;
    //补0 
    if(s.size()%4==1){
    	s="000"+s;
	}else if(s.size()%4==2){
		s="00"+s;
	}else if(s.size()%4==3){
		s="0"+s;
	}
	//每4位一格,将4位的二进制转换为对应的16进制 
	for(int i=0;i<s.size();i=i+4){
		t=s.substr(i,4);
		cout<<num(t); 
	}
	return 0;
}