题解
【基础】二进制转十六进制
1 条题解
-
0
解题思路
题目要求把二进制数转换成十六进制数。二进制最长 100 位,不能用普通整数存,要利用规律。
核心规律:二进制的每 4 位,正好对应十六进制的 1 位。
因为 16 = 2⁴,所以 4 位二进制正好表示 0~15,就是 1 位十六进制。
步骤:
- 如果二进制的位数不是 4 的倍数,在左边补 0,让长度变成 4 的倍数
- 从左边开始,每 4 位分成一组
- 每组单独转成十六进制数字(0~9、A~F)
- 连起来输出
怎么转十六进制字符?
- 0~9 直接转成数字字符
- 10~15 要转成 A~F(10→A、11→B……15→F)
为什么每 4 位一组? 和八进制每 3 位一组同理,因为 16 = 2⁴,所以 4 位二进制对应 1 位十六进制。
参考代码
#include <iostream> #include <string> using namespace std; char num(string s) { int r = 0, t = 1; for (int i = s.size() - 1; i >= 0; i--) { r += (s[i] - '0') * t; t *= 2; } if (r < 10) return char(r + '0'); else return char(r - 10 + 'A'); } int main() { string s; cin >> s; if (s.size() % 4 == 1) s = "0" + s; else if (s.size() % 4 == 2) s = "00" + s; else if (s.size() % 4 == 3) s = "000" + s; for (int i = 0; i < s.size(); i += 4) { cout << num(s.substr(i, 4)); } return 0; }复杂度分析
- 时间复杂度:O(N),N 为二进制位数
- 空间复杂度:O(1)
- 1