1 条题解
-
0
题解:任意进制互相转换
思路
分成两步:
- 使用
value = value * A + digit,把 进制数转换为十进制数值; - 不断对 取余,把十进制数值转换为 进制。
这是一种通用做法。两部分代码应分别封装成“字符转数码”和“数码转字符”的逻辑,减少出错。
复杂度
时间复杂度为 ,其中 为十进制数值。
参考代码
#include <bits/stdc++.h> using namespace std; int value(char c) { if (c >= '0' && c <= '9') return c - '0'; return c - 'A' + 10; } int main() { int a, b; string s; cin >> a >> s >> b; unsigned long long n = 0; for (char c : s) { n = n * a + value(c); } string digit = "0123456789ABCDEF"; if (n == 0) { cout << 0 << "\n"; return 0; } string ans; while (n > 0) { ans += digit[n % b]; n /= b; } reverse(ans.begin(), ans.end()); cout << ans << "\n"; return 0; } - 使用
信息
- ID
- 5112
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 34
- 已通过
- 9
- 上传者
粤公网安备44195502000195号