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;
}