题解
【入门】十六进制转十进制
1 条题解
-
0
解题思路
题目要求把十六进制数转换成十进制数。十六进制最长 10 位,数字较大,要用 long long。
方法:按位展开。
十六进制转十进制,就是把每一位的数值乘以对应的 16 的幂次再相加:
个位 × 16⁰,十位 × 16¹,百位 × 16²……
步骤:
- 用 t 记录当前位的权重,从 1(16⁰)开始
- 从最低位(字符串末尾)往最高位扫:
- 如果是数字字符 '0'~'9',值就是 s[i] - '0'
- 如果是字母 'A'~'F',值就是 s[i] + 10 - 'A'(A 是 10,B 是 11……F 是 15)
- 这一位的值 × t,累加到结果 r
- t 乘 16,变成下一位的权重
- 输出 r
举例 十六进制 2ECF:
- F=15,C=12,E=14,2=2
- 2×16³ + 14×16² + 12×16 + 15 = 8192 + 3584 + 192 + 15 = 11983
参考代码
#include <iostream> #include <string> #include <cctype> using namespace std; int main() { string s; long long r = 0, t = 1; cin >> s; for (int i = s.size() - 1; i >= 0; i--) { if (isdigit(s[i])) { r += (s[i] - '0') * t; // 数字 0~9 } else { r += (s[i] + 10 - 'A') * t; // 字母 A~F 转 10~15 } t = t * 16; } cout << r; return 0; }复杂度分析
- 时间复杂度:O(N),N 为位数
- 空间复杂度:O(1)
- 1