什么是泛数字。使用 C++ 查找泛数字的方法
PandigitalNumber-在数学中,Pandigital数是一个整数,在给定的基数中,其有效数字中的每个数字在基数中至少使用一次。
Pandigital数是每个数字至少一次用作基数的整数。
例如,1245678是一个泛数字号码。
解决这个问题的方法
输入一个数字和一个基数。
检查基数是否小于2且大于10然后返回1否则检查数字是否为泛数字。
Integer函数is_pandigital(longlongn,intbase)接受一个数字和一个基数作为输入。
对数字中存在的所有数字进行计数并增加计数。
遍历所有数字以查看是否有空数字,因此返回false。
整数函数is_zeroless(longlongn,intbase)将输入和数字及其基数作为输入,如果找到数字则返回。
遍历所有数字,查找是否有任何数字为空,则返回0。
最后,该函数check_number(longlongnumber,intbase)将数字及其基数作为输入。如果找到,则函数返回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.
        作者头像
        作者名称
        作者性别
        
        
        


评论列表