试题名称
:进制判断
时间限制
:
1.0 s
内存限制
:
128.0 MB
3.2.1
问题描述
N进制数指的是逢 N进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进 制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母
A
至
F 表示十至十 五)。
现在有N 个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如,
15A6F 就只可能是十 六进制,而
1011
则是四种进制皆有可能。
3.2.2
输入描述
输入的第一行为一个十进制表示的整数 N。接下来N 行,每行一个字符串,表示需要判断的数。保证所有字符串均 由数字和大写字母组成,且不以
0
开头。保证不会出现空行。
保证1<=N<=1000 ,保证所有字符串长度不超过 10。
3.2.3
输出描述
输出 N行,每行 4个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、 十六进制数。使用
1
表示可能,使用
0
表示不可能。
例如,对于只可能是十六进制数的
15A6F
,就需要输出
0 0 0 1
;而对于四者皆有可能的
1011
,则需要输出 1 1 1 1
。
3.2.4
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任 何提示信息。
3.2.5
样例输入
1
215A6F1011
3.2.6
样例输出
1
0 0 0 1
1 1 1 1
3.2.7
样例输入
2
4123456712345678FFGG
3.2.8
样例输出
2
0 1 1 10 0 1 10 0 0 10 0 0 0
解析:找出每个字符串中最大的字符,根据其大小判断可能是几进制数,详见代码:
#include <iostream>
using namespace std;
int main() {
int n = 0;
cin >> n;
for (int i = 0; i < n; i++) {
string s;
cin >> s;
char maxc = '0';
for (int i = 0; i<s.length(); i++)
if (s[i] > maxc)
maxc = s[i];
if (maxc>'F'){
cout<<"0 0 0 0"<<endl;
}else if(maxc>'9'){
cout<<"0 0 0 1"<<endl;
}else if (maxc>'7'){
cout<<"0 0 1 1"<<endl;
}else if (maxc>'1'){
cout<<"0 1 1 1"<<endl;
}else{
cout<<"1 1 1 1"<<endl;
}
}
return 0;
}
另一种解法:
#include <iostream>
using namespace std;
int main() {
int n = 0;
cin >> n;
for (int i = 0; i < n; i++) {
char str[11];
cin >> str;
char max = '0';
for (int i = 0; str[i] != '\0'; i++)
if (str[i] > max)
max = str[i];
cout << (max <= '1') << " " << (max <= '7') << " " << (max <= '9') << " " <<
(max <= 'F') << endl;
}
return 0;
}