B3868 [GESP202309 三级] 进制判断

· · 题解

欢迎大家报名洛谷网校的课程,期待和大家一起进步!

思路分析

我们可以定一个长度为 4 的数组,依次来表示表示一个二进制、八进制、十进制、十六进制。

我们可以依次遍历字符串的每一位,如果该字符串中存在大于 '1' 的字符,则该字符串一定不能表示一个二进制数(二进制数字符串中只有 '0''1'),并把数组中对应的值改为 '0';同理,如果字符串中存在大于 '7' 的数,则一定不能表示一个八进制数;如果字符串中存在大于 '9' 的数,则一定不能表示一个十进制数;如果字符串中存在大于 'F' 的数,则一定不能表示一个十六进制数。

之后输出该数组的值,并用空格隔开。

核心代码

//定义一个 bool 类型数组,用来表示能否表示对应的进制数
bool a[4] = {1, 1, 1, 1};

for (int j = 0; j < s.length(); j++){
    //依次判断字符串中每一个字符
    if (s[j] > '1') a[0] = 0;
    if (s[j] > '7') a[1] = 0;
    if (s[j] > '9') a[2] = 0;
    if (s[j] > 'F') a[3] = 0;
}
cout << a[0] << ' ' << a[1] << ' ' << a[2] << ' ' << a[3] << endl;