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

C โปรแกรมตรวจสอบตัวเลขว่าเป็นฐานใดฐานหนึ่งหรือไม่


ให้ตัวเลขเป็นสตริงและฐาน ภารกิจคือตรวจสอบว่าจำนวนที่กำหนดเป็นฐานที่กำหนดหรือไม่

เราต้องตรวจสอบตัวเลขและฐานตามระบบตัวเลขที่มีฐานเช่น 2 สำหรับเลขฐานสอง, 8 สำหรับเลขฐานแปด, 10 สำหรับเลขฐานสิบและ 16 สำหรับเลขฐานสิบหก ตามนี้ เราต้องค้นหาว่าตัวเลขที่ระบุในสตริงนั้นเป็นของเบสตัวใดตัวหนึ่งหรือไม่ ถ้ามันเป็นของเบสตัวใดตัวหนึ่ง เราต้องพิมพ์คำว่า "ใช่" บนหน้าจอเอาต์พุต “ไม่” บนหน้าจอส่งออก

อย่างที่เราทราบ ตัวเลข/นิพจน์ “1A6” เป็นของฐาน 16 และ “1010” เป็นฐาน 2 แต่สิ่งนี้สามารถตัดสินได้โดยการวิเคราะห์ด้วยสายตา ตอนนี้เราต้องหาวิธีแก้ปัญหาด้วยความช่วยเหลือจาก โปรแกรม

ตัวอย่าง

Input: str = “1010”, base =2
Output: yes
Input: str = “1AA4”, base = 16
Output: yes
Input: str = “1610”, base = 2
Output: No

แนวทางที่เราจะใช้ในการแก้ปัญหาที่กำหนด

  • ตรวจสอบว่าฐานอยู่ระหว่าง 2 ถึง 16
  • จากนั้นจะตรวจสอบแต่ละหลักของสตริกที่เป็นฐานเฉพาะหรือไม่
  • ถ้ามันเป็นของก็คืนค่าจริง อย่างอื่นเป็นเท็จ

อัลกอริทึม

Start
Step 1 -> In function bool isInGivenBase(char str[], int base)
   If base > 16 then,
      Return false
   Else If base <= 10 then,
   Loop For i = 0 and i < strlen(str) and i++
      If !(str[i] >= '0' and str[i] < ('0' + base)) then,
         Return false
      Else
      Loop For i = 0 and i < strlen(str) and i++
         If NOT ((str[i] >= '0' && str[i] < ('0' + base)) ||
            (str[i] >= 'A' && str[i] < ('A' + base – 10) ) then,
            Return false
            Return true
   Step 2 -> In function int main()
      Set str[] = {"AF87"}
      If isInGivenBase(str, 16) then,
         Print "yes "
      Else
         Print "No "
Stop

ตัวอย่าง

#include <ctype.h>
#include <stdio.h>
#include <string.h>
bool isInGivenBase(char str[], int base) {
   // Allowed bases are till 16 (Hexadecimal)
   if (base > 16)
      return false;
      // If base is below or equal to 10, then all
      // digits should be from 0 to 9.
   else if (base <= 10) {
      for (int i = 0; i < strlen(str); i++)
      if (!(str[i] >= '0' and
         str[i] < ('0' + base)))
         return false;
   }
   // If base is below or equal to 16, then all
   // digits should be from 0 to 9 or from 'A'
   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;
}
// Driver code
int main() {
   char str[] = {"AF87"};
   if (isInGivenBase(str, 16))
      printf("yes\n");
   else
      printf("No\n");
   return 0;
}

ผลลัพธ์

yes