酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++实现k进制到十进制的安全转换及开发技巧

### 💻 代码实现 以下是不使用 `stdexcept` 的修正版代码,主要通过 `bool` 类型的返回值和错误提示来处理输入合法性问题。 ```cpp #include <iostream> #include <string> // 检查输入的 k 是否合法 bool isValidBase(int k) { return k >= 2 && k <= 16; } // 检查输入的 k 进制数是否合法 bool isValidNumber(int k, const std::string& num) { for (char c : num) { int digit; if (c >= '0' && c <= '9') { digit = c - '0'; } else if (c >= 'A' && c <= 'F') { digit = c - 'A' + 10; } else { return false; } if (digit >= k) { return false; } } return true; } // 将字符转换为对应的数值 int charToInt(char c) { if (c >= '0' && c <= '9') { return c - '0'; } 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; std::cout << "请输入进制 k (2 - 16): "; std::cin >> k; if (!isValidBase(k)) { std::cout << "输入的进制 k 不合法,请输入 2 到 16 之间的整数。" << std::endl; return 1; } std::cout << "请输入 k 进制数: "; std::cin >> num; if (!isValidNumber(k, num)) { std::cout << "输入的 k 进制数不合法。" << std::endl; return 1; } int result = convertToDecimal(k, num); std::cout << "转换后的十进制数为: " << result << std::endl; return 0; } ``` ### 🔍 代码解释 - **`isValidBase` 函数**:用于判断输入的进制 `k` 是否在 `2` 到 `16` 这个合理范围内,若在则返回 `true`,反之返回 `false`。 - **`isValidNumber` 函数**:遍历输入的 `k` 进制数字符串,把每个字符转换为对应的数值,并检查这些数值是否小于 `k`,同时确保字符是合法的数字(`0 - 9`)或字母(`A - F`)。若都满足条件返回 `true`,否则返回 `false`。 - **`charToInt` 函数**:将字符转化为对应的整数值,数字字符 `'0' - '9'` 转化为 `0 - 9`,字母字符 `'A' - 'F'` 转化为 `10 - 15`。 - **`convertToDecimal` 函数**:采用按位加权的方法把 `k` 进制数转换为十进制数。 - **`main` 函数**:负责读取用户输入,调用前面的函数进行合法性检查,若输入合法则调用转换函数输出结果,不合法则输出错误信息并终止程序。 ### 💡 开发建议 - **用户体验优化**:可以不断完善提示信息,让用户能更清晰地了解输入要求,例如提示输入的 `k` 进制数的字母需使用大写。 - **边界情况处理**:对于输入错误后的处理可以更友好,比如允许用户重新输入,而不是直接终止程序。可以在输入不合法时使用循环让用户再次输入。 - **代码复用和模块化**:可以将一些功能封装成类,方便后续对更多进制转换相关功能的扩展,比如支持更多进制范围,或者支持不同格式化的输入。 ######[AI写代码神器 | 982点数解答 | 2026-07-25 19:13:19]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]