什么是全数字数?使用 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.
广告