Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

범 디지털 숫자 란 무엇입니까? C++를 사용하여 범디지털 숫자를 찾는 접근

<시간/>

판디지털 번호 − 수학에서 Pandigital 수는 주어진 기수에서 유효 자릿수 사이에 기수에 사용된 각 자릿수가 최소 한 번 이상 있는 정수입니다.

Pandigital 숫자는 각 숫자가 한 번 이상 밑수로 사용되는 정수입니다.

예를 들어, 1245678은 범디지털 숫자입니다.

이 문제를 해결하기 위한 접근 방식

  • 숫자와 밑수를 입력하세요.

  • 2보다 작고 10보다 크면 밑수를 확인하고 1을 반환하고 그렇지 않으면 숫자가 범디지털인지 확인합니다.

  • 정수 함수 is_pandigital(long long n, int base)은 숫자와 밑수를 입력으로 받습니다.

  • 숫자에 있는 모든 자릿수를 세고 카운트를 증가시킵니다.

  • 모든 숫자를 반복하여 빈 숫자가 있는지 확인하므로 false를 반환합니다.

  • 정수 함수 is_zeroless(long long n, int base)는 입력과 숫자 및 그 밑을 입력으로 취하고 숫자가 발견되면 반환합니다.

  • 모든 숫자를 반복하면서 비어 있는 숫자가 있으면 0을 반환합니다.

  • 마지막으로 check_number(long long number, int base) 함수는 숫자와 그 밑을 입력으로 사용합니다. 이 함수는 찾으면 1을 반환하고 그렇지 않으면 0을 반환합니다.

예시

#include <iostream.h>"
using namespace std;
int is_pandigital(long long number, int base);
int is_zeroless_pandigital(long long number, int base);
int check_number(long long number, int base);
int main(){
   long long number;
   int base;
   cin>>"Enter a number";
   cout<<number;
   cin>>"Enter Base";
   cout<<base;
   if(base < 2 || base > 10){
      return 1;
   }
   if(check_number(number, base)){
      if(is_pandigital(number, base)){
         cout<<number<<""<<base;
      }
      else{
         cout<< number<< "is not a pandigital number in base"<<base;
      }
      if(is_zeroless_pandigital(number, base)){
         cout<<number<< "is a zeroless pandigital number in base"<<base;
      }
      else{
         cout<<number<< "is not a zeroless pandigital number in base" <<base;
      }
   }
   else{
      cout<<number<< "is not a valid number in base"<<base;
   }
   return 0;
}
int is_pandigital(long long number, int base){
   /* define an array to store the count of all digits */
   int digits[10], i;
   memset(digits, 0, sizeof(int)*10);
   /* for every digit in number, then increment count by one */
   while(number > 0){
      int digit = number % 10;
      ++digits[digit];
      number /= 10;
   }
   /* iterate over all the digits to see if there's an empty one, if so return false */
   for(i = 0; i < base; ++i)
      if(digits[i] == 0)
         return 0;
   /* if no empty digit found, return true */
   return 1;
}
int is_zeroless_pandigital(long long number, int base){
   /* define an array to store the count of all digits */
   int digits[10], i;
   memset(digits, 0, sizeof(int)*10);
   /* for every digit in number, increment count by one */
   while(number > 0){
      int digit = number % 10;
      if(digit == 0) return 0;
         ++digits[digit];
      number /= 10;
   }
   /* iterate over digits to see if there's an empty one, if so return false */
   for(i = 1; i < base; ++i)
   if(digits[i] == 0)
      return 0;
   /* if no empty digit found, return true */
   return 1;
}
/* This function checks if given number is valid in the given base */
int check_number(long long number, int base){
   while(number > 0){
      int digit = number % 10;
      if(digit > base - 1) return 0;
         number /= 10;
   }
   return 1;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -

Enter a number: 45
Enter base(min:2 to max-10):10
45 is not a valid number.