Cho một số dưới dạng chuỗi và một cơ số (base), kiểm tra xem số đó có hợp lệ trong cơ số đó hay không.
Các cơ số phổ biến: 2 (nhị phân), 8 (bát phân), 10 (thập phân), 16 (thập lục phân).
Ví dụ: "1A6" hợp lệ base 16, "1010" hợp lệ base 2, nhưng "1610" không hợp lệ base 2.
Ví dụ
Input: str = "1010", base = 2 → Output: yes Input: str = "1AA4", base = 16 → Output: yes Input: str = "1610", base = 2 → Output: No
Phương pháp:
- Kiểm tra base từ 2 đến 16.
- Duyệt từng ký tự, kiểm tra xem có thuộc bảng ký tự của base đó không.
- Trả về true nếu hợp lệ, false nếu không.
Mã nguồn C
#include <ctype.h>
#include <stdio.h>
#include <string.h>
bool isInGivenBase(char str[], int base) {
if (base > 16) return false;
else if (base <= 10) {
for (int i = 0; i < strlen(str); i++)
if (!(str[i] >= '0' && str[i] < ('0' + base)))
return false;
} else {
for (int i = 0; i < strlen(str); i++)
if (!((str[i] >= '0' && str[i] < ('0' + base)) ||
(str[i] >= 'A' && str[i] < ('A' + base - 10))))
return false;
}
return true;
}
int main() {
char str[] = "AF87";
if (isInGivenBase(str, 16))
printf("yes\n");
else
printf("No\n");
return 0;
}
Kết quả
yes