ได้รับตัวเลขในรูปสตริงและฐาน (base) ภารกิจคือตรวจสอบว่าเลขนั้นอยู่ในฐานที่กำหนดหรือไม่
ฐานที่รองรับ: 2 (binary), 8 (octal), 10 (decimal), 16 (hexadecimal)
เช่น "1A6" อยู่ในฐาน 16, "1010" อยู่ในฐาน 2, แต่ "1610" ไม่อยู่ในฐาน 2
ตัวอย่าง
Input: str = "1010", base = 2 Output: yes Input: str = "1AA4", base = 16 Output: yes Input: str = "1610", base = 2 Output: No
แนวทาง
- ตรวจสอบฐานอยู่ระหว่าง 2-16
- ถ้าฐาน ≤ 10: ตรวจสอบทุกตัวอักษรต้องเป็น 0-9 และน้อยกว่า base
- ถ้าฐาน > 10: ตรวจสอบตัวอักษรเป็น 0-9 หรือ A-F (ขึ้นกับ base)
อัลกอริทึม
Start
Step 1: ฟังก์ชัน isInGivenBase(char str[], int base)
ถ้า base > 16 return false
ถ้า base <= 10:
ลูปทุกตัวอักษร: ถ้าไม่ใช่ '0' ถึง '0'+base-1 return false
ถ้า base > 10:
ลูปทุกตัวอักษร: ถ้าไม่ใช่ (0-9) และไม่ใช่ (A ถึง A+base-11) return false
return true
Step 2: main() กำหนด str="AF87" เรียก isInGivenBase(str, 16) แสดง yes/no
Stop
โค้ดตัวอย่าง
#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;
}
ผลลัพธ์
yes