给定基数中的 C++ 泛数字数

包含从 0 到基数 B 的所有数字的数字称为该基数中的泛数字数。但是,有些数字具有从 1 到 9 的数字,称为无零泛数字。泛数字号码的一些示例是 0123456789、0789564312 等。

在本教程中,我们将讨论给定一个数字和一个基数的问题,我们需要检查该数字是否在给定的基数中是泛数字的,例如 -

Input: num = “9651723467380AZ”, base = 10
Output: YES
Explanation: num contains all the digits in the base 10i.efrom 0 to 9, so it is a pandigital number.

Input: num = “130264ABCDE745789”, base = 16
Output: NO
Explanation: num does not contain F(15) which is in the base 16i.efrom 0 to 15, so it is not a pandigital number.

寻找解决方案的方法

为了解决这个问题,我们将使用 Set 并插入集合中的每个数字,因为我们需要存储唯一值。

  • 遍历字符串,一次获取每个字符。

  • 然后检查元素是整数还是字母。

  • 如果是字母表,则在它在字母表上的位置加上10代表2位数字。

  • 将值存储在集合中。

  • 遍历后,检查集合的大小是否等于基数。

示例

上述方法的 C++ 代码

 
#include<bits/stdc++.h>
using namespace std;
int main(){
    int base = 10;
    char n[] = "9651723467380AZ";
    // 声明集以存储唯一值。
    set<int, greater<int> > s;
    // 遍历字符串。
    for (int i = 0; i < strlen(n); i++){
        // 检查元素是否为整数。
        if (n[i] >= '0' && n[i] <= '9')
           s.insert(n[i]- '0');
        // 检查元素是否为字母表。
        else if (n[i] - 'A' <= base - 11)
           s.insert(n[i] - 'A' + 10) ;
    }
    // 检查是否所有数字都存在。
    if(s.size()==base)
       cout<< "YES";
    else
        cout<< "NO";
    return 0;
}
输出结果
YES

结论

在本教程中,我们讨论了一个给定数字和底数的问题。我们需要找出这个数字是否是泛数字的。我们讨论了通过在集合中插入值并使用基检查其大小来解决此问题的简单方法。我们还讨论了针对这个问题的 C++ 程序,我们可以使用 C、Java、Python 等编程语言来解决这个问题。我们希望本教程对您有所帮助。