简单高效:k 进制数转十进制数的 C++ 实现
### 💡 思路 要把一个 `k` 进制数转成十进制数,我们就利用按位加权的方法。从 `k` 进制数的最高位开始,依次乘以 `k` 的相应次幂并累加,最终得到对应的十进制数。 ### 📝 简化后的代码实现 ```cpp #include <iostream> #include <string> int main() { int k; std::string num; std::cin >> k; // 输入 k 进制 std::cin >> num; // 输入 k 进制数 int decimal = 0; for (char digit : num) { if (digit >= '0' && digit <= '9') { decimal = decimal * k + (digit - '0'); } else { decimal = decimal * k + (digit - 'A' + 10); } } std::cout << decimal << std::endl; return 0; } ``` ### 🔍 代码解释 - **输入部分**:通过 `std::cin` 分别读取 `k` 和 `k` 进制数 `num`。 - **核心转换逻辑**: - 初始化变量 `decimal` 为 0,用于存放最终的十进制结果。 - 利用 `for` 循环遍历 `k` 进制数 `num` 的每一位字符。 - 对于每个字符,如果它是数字(`'0'` 到 `'9'` 之间),就把当前的 `decimal` 乘以 `k`,再加上该数字对应的整数值 `digit - '0'`;如果是大写字母,就把当前的 `decimal` 乘以 `k`,再加上该字母对应的整数值 `digit - 'A' + 10`。 - **输出结果**:通过 `std::cout` 输出转换后的十进制数。 ### 🚀 复杂度分析 - **时间复杂度**:$O(n)$,这里的 $n$ 是 `k` 进制数 `num` 的长度,因为需要遍历每一位。 - **空间复杂度**:$O(1)$,只用到了常数级的额外空间。 ### 💡 开发建议 - **边界检查**:在实际应用中,要检查输入的 `k` 是否处于 `2` 到 `16` 之间,并且确保 `num` 里每个字符代表的数值小于 `k`,防止出现不合法输入。 - **异常处理**:添加异常处理机制,当输入不合法时能输出相应的错误信息,增强程序的健壮性。 - **代码复用**:如果后续需要多次进行此类转换,可以把转换逻辑封装成一个函数,提高代码的复用性。 ######[AI写代码神器 | 647点数解答 | 2026-07-25 19:09:52]
- 揭秘!十进制数到负进制数的转换程序及代码详解(DeepSeek | 490点数解答 | 2026-01-20 17:31:14)74
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)537
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)224
- 探秘 19 进制:揭开 X 星球记数方式的神秘面纱(GPT | 268点数解答 | 2024-11-17 09:04:06)164
- Python 实现:轻松将十进制数转换为 2 - 36 进制数(字节豆包 | 509点数解答 | 2026-01-02 19:40:44)92
- Python 实现:将十进制整数高效转换为 x 进制的详细解析(字节豆包 | 499点数解答 | 2026-01-10 20:39:11)70
- 核桃星球加法的C++实现及开发建议(字节豆包 | 705点数解答 | 2026-04-06 21:10:23)58
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)455
- C++ 实现:判断 N 个数在二进制、八进制、十进制、十六进制下的可能性(字节豆包 | 812点数解答 | 2026-01-02 19:28:20)86
- Python实现:判断数字在二进制、八进制、十进制、十六进制中的可能性(字节豆包 | 405点数解答 | 2026-01-02 19:43:33)92
- 巧用 Python:判断数字在二进制、八进制、十进制、十六进制中的可能性(字节豆包 | 251点数解答 | 2026-01-02 19:44:35)96
- C++ 实现工厂编号二进制位设置为 1 的程序(字节豆包 | 307点数解答 | 2026-02-28 20:46:41)44