题解
2025-11-28 20:09:31
发布于:湖南
49阅读
0回复
0点赞
#include <iostream>
#include <string>
#include <algorithm> // 用于reverse函数
using namespace std;
// 二进制4位转十六进制字符的映射表
char binToHex(const string& bin) {
if (bin == "0000") return '0';
if (bin == "0001") return '1';
if (bin == "0010") return '2';
if (bin == "0011") return '3';
if (bin == "0100") return '4';
if (bin == "0101") return '5';
if (bin == "0110") return '6';
if (bin == "0111") return '7';
if (bin == "1000") return '8';
if (bin == "1001") return '9';
if (bin == "1010") return 'A';
if (bin == "1011") return 'B';
if (bin == "1100") return 'C';
if (bin == "1101") return 'D';
if (bin == "1110") return 'E';
if (bin == "1111") return 'F';
return '0'; // 理论上不会走到这里
}
int main() {
string binary;
cin >> binary;
// 步骤1:反转二进制字符串,方便从右往左分组
reverse(binary.begin(), binary.end());
string hexStr;
// 步骤2:每4位分组,不足4位时补0
for (int i = 0; i < binary.size(); i += 4) {
string group;
// 取当前4位(不足则补0)
for (int j = 0; j < 4; ++j) {
if (i + j < binary.size()) {
group += binary[i + j];
} else {
group += '0';
}
}
// 反转分组(因为原字符串是反转后的,所以分组也需要反转回原顺序)
reverse(group.begin(), group.end());
// 转换为十六进制字符
hexStr += binToHex(group);
}
// 步骤3:反转十六进制字符串(因为分组是从右往左取的)
reverse(hexStr.begin(), hexStr.end());
// 步骤4:去掉前导零(如果有的话)
size_t start = hexStr.find_first_not_of('0');
if (start == string::npos) {
// 特殊情况:输入是全0,输出0
cout << "0" << endl;
} else {
cout << hexStr.substr(start) << endl;
}
return 0;
}
全部评论 1
[链接描述](
url#include<iostream> #include<string> using namespace std; int main(){ string s; char a[17]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; cin>>s; 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; } for(int i=0;i<s.size();i+=4){ int x=0; if(s[i+3]=='1'){ x+=1; } if(s[i+2]=='1'){ x+=2; } if(s[i+1]=='1'){ x+=4; } if(s[i]=='1'){ x+=8; } cout<<a[x]; } })
2025-12-13 来自 广东
1可以
2025-12-14 来自 湖南
0










有帮助,赞一个