মনে করুন একটি সংখ্যা n এবং ডিজিট সংখ্যা d আছে। আমাদের চেক করতে হবে n কি d ডিজিট সংখ্যা হিসেবে যেকোনো বেস ২ থেকে ৩২-এ রিপ্রেজেন্ট করা যায়। ধরুন n = 8 এবং d = 4, তবে এটি বাইনারিয়ে 1000 হিসেবে রিপ্রেজেন্ট করা যায়, এখানে d = 4।
আইডিয়া হল সব বেস একে একে ২ থেকে ৩২ পর্যন্ত চেক করা। বেস চেক করার ধাপগুলো:
- যদি সংখ্যা বেস থেকে ছোট হয় এবং ডিজিট ১ হয়, তবে true রিটার্ন করুন
- যদি ডিজিট ১-এর চেয়ে বেশি হয় এবং সংখ্যা বেস থেকে বড় বা সমান হয়, তবে সংখ্যা থেকে লাস্ট ডিজিট বাদ দিন num/base করে, ডিজিট সংখ্যা কমান, রিকার্সিভলি আবার চেক করুন
- অন্যথায় false রিটার্ন করুন
উদাহরণ কোড
#include <iostream>
using namespace std;
bool isRepresentedInDDigits(int num, int d, int base) {
if (d == 1 && num < base)
return true;
if (d > 1 && num >= base)
return isRepresentedInDDigits(num / base, --d, base);
return false;
}
bool checkNumber(int num, int d) {
// সব বেস একে একে চেক করুন
for (int base = 2; base <= 32; base++)
if (isRepresentedInDDigits(num, d, base))
return true;
return false;
}
int main() {
int num = 8;
int dig = 2;
if (checkNumber(num, dig))
cout << "Can be represented";
else
cout << "Can not be represented";
return 0;
}
আউটপুট
Can be represented