進制判斷
???
問題描述
N進制數指的是逢N進一的計數制。例如,人們日常生活中大多使用十進制計數, 而計算機底層則一般使用二進制。除此之外,八進制和十六進制在一些場合也是 常用的計數制(十六進制中,一般使用字母A至F表示十至十五)。
現在有N個數,請你分別判斷他們是否可能是二進制、八進制、十進制、十六進 制。例如,15A6F就只可能是十六進制,而1011則是四種進制皆有可能。
????
輸入描述
輸入的第一行為一個十進制表示的整數N。接下來 N行,每行一個字符串,表示需要判斷的數。保證所有字符串均由數字和大寫字母組成,且不以 0 開頭。保 證不會出現空行。
保證 1≤N≤1000,保證所有字符串長度不超過10。
?????
輸出描述
輸出N行,每行4個數,用空格隔開,分別表示給定的字符串是否可能表示一個二 進制數、八進制數、十進制數十六進制數。使用 1 表示可能,使用 0 表示不可 能。
例如,對于只可能是十六進制數的 15A6F,就需要輸出0001;而對于四者皆有可 能的 1011,則需要輸出1111。
樣例輸入1
2
15A6F
1011
樣例輸出1
0 0 0 1
1 1 1 1
樣例輸入2
4
1234567
12345678
FF
GG
樣例輸出2
0 1 1 1
0 0 1 1
0 0 0 1
0 0 0 0
#include<bits/stdc++.h>
using namespace std;
void n2(string s){bool m = true;for(int i = 0; i < s.size(); i++){if (s[i] >= '2'){m = false;}}if (m){cout << 1 << " ";} else {cout << 0 << " ";}
}
void n8(string s){bool m = true;for(int i = 0; i < s.size(); i++){if (s[i] >= '8'){m = false;}}if (m){cout << 1 << " ";} else {cout << 0 << " ";}
}
void n10(string s){bool m = true;for(int i = 0; i < s.size(); i++){if (s[i] >= 'A'){m = false;}}if (m){cout << 1 << " ";} else {cout << 0 << " ";}
}
void n16(string s){bool m = true;for(int i = 0; i < s.size(); i++){if (s[i] >= 'G'){m = false;}}if (m){cout << 1 << " ";} else {cout << 0 << " ";}
}
int main(){int n;cin >> n;for(int i = 0; i < n ;i++){string s;cin >> s;n2(s);n8(s);n10(s);n16(s);cout << endl;}return 0;
}