Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C ตรวจสอบว่าเลขอยู่ในฐานที่กำหนดหรือไม่ (Check Number Base)

ได้รับตัวเลขในรูปสตริงและฐาน (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