Cho một chuỗi số và cơ số B. Kiểm tra xem chuỗi đó có phải là số hợp lệ trong cơ số B hay không. Ví dụ "101110" cơ số 2 → true, "A8F" cơ số 16 → true.
Cách làm: kiểm tra mọi ký tự có nằm trong tập ký hiệu của cơ số B hay không. Cơ số ≤ 10 dùng '0'..'9', cơ số > 10 thêm 'A'..'F'.
Ví dụ
#include <iostream>
using namespace std;
bool inGivenBase(string s, int base) {
if (base > 16)
return false;
else if (base <= 10) {
for (int i = 0; i < s.length(); i++)
if (!(s[i] >= '0' && s[i] < ('0' + base)))
return false;
} else {
for (int i = 0; i < s.length(); i++)
if (! ((s[i] >= '0' && s[i] < ('0' + base)) || (s[i] >= 'A' && s[i] < ('A' + base - 10))))
return false;
}
return true;
}
int main() {
string str = "A87F";
int base = 16;
if(inGivenBase(str, base)){
cout << str << " is in base " << base;
} else {
cout << str << " is not in base " << base;
}
}
Kết quả
A87F is in base 16