প্যান্ডিজিটাল নাম্বার — গণিতে, একটি প্যান্ডিজিটাল নাম্বার হল এমন একটি পূর্ণসংখ্যা যেটি একটি নির্দিষ্ট বেসে তার সগুনফলকে প্রতিটি ডিজিট কমপক্ষে একবার ব্যবহার করে তৈরি হয়।
উদাহরণস্বরূপ, ১২৪৫৬৭৮ একটি প্যান্ডিজিটাল নাম্বার।
সমাধানের পদ্ধতি
- সংখ্যা এবং বেস ইনপুট নিন।
- বেস ২ থেকে ১০ এর মধ্যে কিনা চেক করুন।
is_pandigital(long long n, int base)ফাংশন দিয়ে সব ডিজিটের ফ্রিকোয়েন্সি গণনা করুন।- বেসের অধীনে সব ডিজিট কমপক্ষে একবার আছে কিনা যাচাই করুন।
is_zeroless_pandigitalফাংশন দিয়ে ০ বাদে প্যান্ডিজিটাল চেক করুন।check_numberফাংশন দিয়ে সংখ্যা বেসে বৈধ কিনা যাচাই করুন।
উদাহরণ
#include <iostream>
using namespace std;
int is_pandigital(long long number, int base) {
int digits[10] = {0};
while (number > 0) {
int digit = number % 10;
++digits[digit];
number /= 10;
}
for (int i = 0; i < base; ++i)
if (digits[i] == 0) return 0;
return 1;
}
int is_zeroless_pandigital(long long number, int base) {
int digits[10] = {0};
while (number > 0) {
int digit = number % 10;
if (digit == 0) return 0;
++digits[digit];
number /= 10;
}
for (int i = 1; i < base; ++i)
if (digits[i] == 0) return 0;
return 1;
}
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;
}
int main() {
long long number; int base;
cin >> number >> base;
if (base < 2 || base > 10) return 1;
if (check_number(number, base)) {
if (is_pandigital(number, base))
cout << number << " is pandigital in base " << base;
else
cout << number << " is not pandigital in base " << base;
}
return 0;
}
আউটপুট
Enter a number: 45 Enter base (min:2 to max-10): 10 45 is not a valid number in base 10