什麼是全數字數?使用 C++ 查詢全數字數的方法


全數字數 − 在數學中,全數字數是在給定基數下,其有效數字中至少包含基數中使用的每個數字的整數。

全數字數是指每個數字至少在基數中使用一次的整數。

例如,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.

更新於:2021 年 2 月 5 日

419 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.