酷代码 AI
菜单

对于十进制来说是错误的,但是对于 进制来说是正确的。 即, , 而 。 你的任务是写一段程序读入三个整数 ,然后确定一个进制 使得 成立. 如果 有很多选择, 输出最小的一个。 例如: . 则有     因为             。  对于进制 ,有 。这种情况下,应该输出 。如果没有合适的进制,则输出 。 提示, 的值也应该大于 上的数字 输入 一行,包含三个整数p、q、r,相邻两个整数之间用单个空格隔开。 p、q、r的所有位都是数字,并且1 <= p、q、r <= 1,000,000。 输出 一个整数:即使得p * q = r成立的最小的B。如果没有合适的B,则输出 0。 样例输入 复制 6 9 42 样例输出 复制 13 来源/分类 进制转换

```cpp #include <iostream> #include <string> #include <algorithm> using namespace std; // 将字符串s按进制B转换为十进制数 long long convertToDecimal(const string& s, int B) { long long num = 0; for (char c : s) { int digit; if (c >= '0' && c <= '9') { digit = c - '0'; } else { digit = c - 'A' + 10; // 本题输入都是数字,此分支不会执行 } if (digit >= B) return -1; // 数字不能大于等于进制B num = num * B + digit; if (num > 1000000) return -1; // 超过范围提前结束 } return num; } int main() { string p_str, q_str, r_str; cin >> p_str >> q_str >> r_str; // 找出所有数字中的最大数字,最小进制至少是最大数字+1 int max_digit = 0; for (char c : p_str) max_digit = max(max_digit, c - '0'); for (char c : q_str) max_digit = max(max_digit, c - '0'); for (char c : r_str) max_digit = max(max_digit, c - '0'); // 从最小可能的进制开始尝试 for (int B = max_digit + 1; B <= 36; B++) { // 最大进制设为36 long long p = convertToDecimal(p_str, B); if (p == -1) continue; long long q = convertToDecimal(q_str, B); if (q == -1) continue; long long r = convertToDecimal(r_str, B); if (r == -1) continue; // 检查是否满足 p * q == r if (p * q == r) { cout << B << endl; return 0; } } // 没有找到合适的进制 cout << 0 << endl; return 0; } ``` [2026-01-20 17:30:22 | AI问答 | 474点数解答]

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