题解
【入门】正整数n转换为16进制
1 条题解
-
0
解题思路
题目要求把十进制数转换成十六进制数。数字最长 18 位,要用 long long。
方法:除 16 取余,倒序排列。
十进制转十六进制,和转八进制类似,就是不断除以 16,记下余数,最后倒序写出来。
步骤:
- 用 x 除以 16,得到余数(0~15)
- 余数转成十六进制字符:0~9 转数字,10~15 转 A~F
- x 变成 x÷16
- 重复,直到 x 变成 0
- 把余数从后往前拼成结果
怎么转 A~F? 十六进制里 10 是 A、11 是 B……15 是 F。所以余数 10 转成 A 就是:n + 'A' - 10。
特殊情况: 如果输入就是 0,直接输出 0。
举例 60 转十六进制:
- 60÷16=3 余 12 → 12 是 C
- 3÷16=0 余 3 → 3 是 3
- 倒序:3C
参考代码
#include <iostream> #include <string> using namespace std; int main() { string s; long long x; cin >> x; while (x != 0) { int n = x % 16; char c; if (n > 10) c = n + 'A' - 10; // 10~15 转 A~F else c = n + '0'; // 0~9 转数字 s = c + s; x = x / 16; } if (s == "") cout << 0; // 0 的特殊情况 else cout << s; return 0; }复杂度分析
- 时间复杂度:O(log N),每次除以 16
- 空间复杂度:O(log N),存结果字符串
- 1