Computer >> Máy Tính >  >> Lập trình >> lập trình C

C Chương trình kiểm tra xem một số có thuộc một cơ số cụ thể hay không

Cho một số dưới dạng chuỗi và cơ số; nhiệm vụ là kiểm tra xem số lượng đã cho có phải là cơ số đã cho đó hay không.

Chúng ta phải kiểm tra số và cơ số theo hệ thống số trong đó có các cơ số như 2 đối với số nhị phân, 8 đối với số bát phân, 10 đối với số thập phân và 16 đối với số thập lục phân. Theo đó, chúng ta phải tìm xem số đã cho trong một chuỗi có thuộc một cơ số cụ thể hay không, Nếu nó thuộc một cơ số cụ thể thì chúng ta phải in “Có” trên màn hình đầu ra; khác “Không” trên màn hình đầu ra.

Như chúng ta đã biết, số / biểu thức “1A6” là cơ số 16 và “1010” là cơ số 2, nhưng điều này có thể được đánh giá bằng cách chỉ phân tích trực quan, bây giờ chúng ta phải tìm cách giải quyết vấn đề với sự trợ giúp của chương trình.

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 tiếp cận mà chúng tôi sẽ sử dụng để giải quyết vấn đề đã cho -

  • Kiểm tra xem cơ sở có nằm trong khoảng từ 2 đến 16 không.
  • Sau đó, sẽ kiểm tra từng chữ số của vạch có thuộc cơ sở cụ thể hay không.
  • Nếu nó thuộc về thì trả về true, còn lại là false.

Thuật toán

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

Ví dụ

#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;
}

Đầu ra

yes