不使用 cctype 库实现 k 进制数转十进制数的 C++ 代码
### 💡 思路分析 之前我们使用 `cctype` 库来判断字符是否为数字,现在我们避免使用这个库,核心思路依旧是按位加权求和。对于输入的 `k` 进制数,从左到右逐位处理,将每一位字符转换为对应的数值,再结合位权计算出对应的十进制值。 ### 📝 代码实现 ```cpp #include <iostream> #include <string> // 将字符转换为对应的数值 int charToInt(char c) { if (c >= '0' && c <= '9') { return c - '0'; } else { return c - 'A' + 10; } } // 将 k 进制数转换为十进制数 int convertToDecimal(int k, const std::string& num) { int decimal = 0; for (char c : num) { decimal = decimal * k + charToInt(c); } return decimal; } int main() { int k; std::string num; // 输入 k 进制 std::cin >> k; // 输入 k 进制数 std::cin >> num; // 转换为十进制数 int result = convertToDecimal(k, num); // 输出结果 std::cout << result << std::endl; return 0; } ``` ### 🔍 代码解释 1. **`charToInt` 函数**: - 通过 `if` 语句判断字符 `c` 是否在 `'0'` 到 `'9'` 这个范围内,如果是,将其转换为对应的数字,即 `c - '0'`。 - 若字符不在 `'0'` 到 `'9'` 范围内,那么它是大写字母,将其转换为对应的数值,公式为 `c - 'A' + 10`。 2. **`convertToDecimal` 函数**: - 初始化一个变量 `decimal` 为 0,用于存储最终的十进制结果。 - 遍历输入的 `k` 进制数字符串 `num`,对于每一个字符,先将当前的 `decimal` 乘以 `k`,然后加上该字符对应的数值,不断更新 `decimal` 的值。 3. **`main` 函数**: - 读取输入的 `k` 和 `k` 进制数 `num`。 - 调用 `convertToDecimal` 函数进行转换,得到十进制结果 `result`。 - 输出转换后的十进制结果。 ### 🚀 复杂度分析 - **时间复杂度**:$O(n)$,其中 $n$ 是 `k` 进制数的长度。因为需要遍历 `k` 进制数的每一位。 - **空间复杂度**:$O(1)$,只使用了常数级的额外空间。 ### 💡 开发建议 - **输入验证**:在实际应用中,要验证输入的 `k` 是否在 `[2, 16]` 范围内,以及 `num` 中的每个字符对应的数值是否小于 `k`,避免出现不合法输入。 - **错误处理**:添加错误处理机制,比如当输入不合法时输出相应的错误信息,增强程序的健壮性。 - **代码扩展**:可以扩展代码以支持更大范围的进制转换,或者支持负数的 `k` 进制数转换。 ######[AI写代码神器 | 816点数解答 | 2026-07-25 19:09:29]
- 揭秘!十进制数到负进制数的转换程序及代码详解(DeepSeek | 490点数解答 | 2026-01-20 17:31:14)75
- C++ 实现:判断 N 个数在二进制、八进制、十进制、十六进制下的可能性(字节豆包 | 812点数解答 | 2026-01-02 19:28:20)87
- Python实现:判断数字在二进制、八进制、十进制、十六进制中的可能性(字节豆包 | 405点数解答 | 2026-01-02 19:43:33)93
- 巧用 Python:判断数字在二进制、八进制、十进制、十六进制中的可能性(字节豆包 | 251点数解答 | 2026-01-02 19:44:35)97
- JSP 实现商品展示模块:分页、搜索、交互与美观界面全搞定!(字节豆包 | 19点数解答 | 2024-12-13 15:00:43)418
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)538
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)587
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)460
- PyCharm 中用 Selenium 编写自动化测试脚本,轻松登录 eShop 测试平台并点击“我的订单”(字节豆包 | 304点数解答 | 2024-11-06 15:38:30)517
- 代码深度剖析:编译器前端优化、问题解决与完整实现之路(字节豆包 | 2430点数解答 | 2025-07-10 21:28:43)170
- C++与C语言代码:文章中查找单词次数及位置的问题分析与改进方案(字节豆包 | 1381点数解答 | 2025-12-15 17:32:28)91
- C++ 实现字符串字符转小写:代码详解与优化(字节豆包 | 424点数解答 | 2026-07-11 19:12:29)14