酷代码 AI
菜单

题目描述c++ N 进制数指的是逢 N 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五)。 现在有N个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如,15A6F 就只可能是十六进制,而 1011 则是四种进制皆有可能。 输入格式 输入的第一行为一个十进制表示的整数 N。接下来 N 行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,可能以 0 开头。保证不会出现空行。 保证 1≤N≤1000,保证所有字符串长度不超过 10。 输出格式 输出 N 行,每行 4 个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用 1 表示可能,使用 0 表示不可能。 例如,对于只可能是十六进制数的 15A6F,就需要输出 0 0 0 1;而对于四者皆有可能的 1011,则需要输出 1 1 1 1。

以下是实现该功能的 C++ 代码: ```cpp #include <iostream> #include <string> using namespace std; // 检查字符串是否可能为二进制数 bool isBinary(const string& num) { for (char c : num) { if (c != '0' && c != '1') { return false; } } return true; } // 检查字符串是否可能为八进制数 bool isOctal(const string& num) { for (char c : num) { if (c < '0' || c > '7') { return false; } } return true; } // 检查字符串是否可能为十进制数 bool isDecimal(const string& num) { for (char c : num) { if (c < '0' || c > '9') { return false; } } return true; } // 检查字符串是否可能为十六进制数 bool isHexadecimal(const string& num) { for (char c : num) { if (!((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F'))) { return false; } } return true; } int main() { int N; cin >> N; cin.ignore(); // 消耗掉换行符 for (int i = 0; i < N; ++i) { string num; getline(cin, num); bool binary = isBinary(num); bool octal = isOctal(num); bool decimal = isDecimal(num); bool hexadecimal = isHexadecimal(num); cout << binary << " " << octal << " " << decimal << " " << hexadecimal << endl; } return 0; } ``` 代码解释 1. 函数定义: - `isBinary` 函数:遍历字符串中的每个字符,若字符不是 `0` 或 `1`,则返回 `false`,否则返回 `true`。 - `isOctal` 函数:遍历字符串中的每个字符,若字符不在 `0` 到 `7` 之间,则返回 `false`,否则返回 `true`。 - `isDecimal` 函数:遍历字符串中的每个字符,若字符不在 `0` 到 `9` 之间,则返回 `false`,否则返回 `true`。 - `isHexadecimal` 函数:遍历字符串中的每个字符,若字符既不是数字 `0` 到 `9`,也不是字母 `A` 到 `F`,则返回 `false`,否则返回 `true`。 2. 主函数: - 读取输入的整数 `N`,表示要判断的数的个数。 - 使用 `for` 循环读取 `N` 个字符串,并调用上述四个函数分别判断每个字符串是否可能为二进制、八进制、十进制、十六进制数。 - 输出判断结果,用空格分隔,每行输出一个字符串的判断结果。 复杂度分析 - 时间复杂度:对于每个输入的字符串,需要遍历一次,时间复杂度为 $O(k)$,其中 $k$ 是字符串的长度。总共需要处理 $N$ 个字符串,因此总的时间复杂度为 $O(Nk)$。 - 空间复杂度:只使用了常数级的额外空间,因此空间复杂度为 $O(1)$。 [2026-01-02 19:28:20 | AI问答 | 812点数解答]

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