酷代码 AI
菜单
服务商

题目描述 请你编一程序实现两种不同进制之间的数据转换。 输入格式 共三行,第一行是一个正整数,表示需要转换的数的进制 n(2≤n≤16),第二行是一个 n 进 制数,若 n>10 则用大写字母 A∼ F 表示数码 10∼ 15,并且该 n进制数对应的十进制的 值不超过 109,第三行也是一个正整数,表示转换之后的数的进制 m(2≤m≤16)。 输出格式 一个正整数,表示转换之后的 m 进制数。 输入输出样例 输入 16 FF 2 输出 11111111 用c++语言,最简单的方法

```cpp #include <iostream> #include <string> #include <algorithm> // 将 n 进制数转换为十进制数 long long toDecimal(const std::string& num, int n) { long long decimal = 0; for (char digit : num) { if (digit >= '0' && digit <= '9') { decimal = decimal * n + (digit - '0'); } else { decimal = decimal * n + (digit - 'A' + 10); } } return decimal; } // 将十进制数转换为 m 进制数 std::string toBaseM(long long decimal, int m) { std::string result = ""; while (decimal > 0) { int remainder = decimal % m; if (remainder < 10) { result += (char)(remainder + '0'); } else { result += (char)(remainder - 10 + 'A'); } decimal /= m; } // 如果结果为空,说明输入为 0 if (result.empty()) { result = "0"; } // 反转结果字符串 std::reverse(result.begin(), result.end()); return result; } int main() { int n, m; std::string num; // 读取输入 std::cin >> n; std::cin >> num; std::cin >> m; // 先将 n 进制数转换为十进制数 long long decimal = toDecimal(num, n); // 再将十进制数转换为 m 进制数 std::string result = toBaseM(decimal, m); // 输出结果 std::cout << result << std::endl; return 0; } ``` 代码解释: 1. `toDecimal` 函数:将 `n` 进制数转换为十进制数。遍历 `n` 进制数的每一位,根据字符的值计算十进制数。如果字符是数字,则直接转换;如果是字母,则将其转换为对应的数值。 2. `toBaseM` 函数:将十进制数转换为 `m` 进制数。通过不断取模和整除操作,将十进制数转换为 `m` 进制数的每一位,并存储在结果字符串中。最后反转结果字符串得到正确的顺序。 3. `main` 函数:读取输入的 `n`、`n` 进制数和 `m`,调用 `toDecimal` 函数将 `n` 进制数转换为十进制数,再调用 `toBaseM` 函数将十进制数转换为 `m` 进制数,最后输出结果。 复杂度分析: - 时间复杂度:$O(k)$,其中 $k$ 是输入的 `n` 进制数的位数。 - 空间复杂度:$O(k)$,主要用于存储转换后的 `m` 进制数。 [2025-12-03 19:08:50 | AI问答 | 692点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多