আমাদের একটি সংখ্যা N এবং একটি বেস b আছে। এই প্রোগ্রামে আমাদের পরীক্ষা করতে হবে যে সংখ্যাটি বেস b-এ 1 দিয়ে শুরু হচ্ছে কি না। ধরা যাক 6 নম্বর দেওয়া হল। বাইনারিতে এটি 110, তাই এটি 1 দিয়ে শুরু হয়, বেস 4-এও এটি 124 হবে। . এখানেও এটি 1 দিয়ে শুরু হয়।
আমরা জানি, যদি একটি সংখ্যা N কে বেস b-এ উপস্থাপন করা হয় তবে b m+1 বিট সিকোয়েন্সে রূপান্তরিত হয় bm bm-1 … b0। এটি bm বোঝায় b m + bm-1 * b m-1 + … + b0 *b 0 =N. বৃহত্তম সংখ্যা হবে 2*b m - 1. Nটি b m এ অবস্থিত ≤ N ≤ 2*b m - 1. এখন আরেকটি বিষয় লক্ষ্য করা যায় যে m $\lfloor\log_2 m\;\rfloor$ এর বেশি হতে পারে না কারণ আমরা যখন বেস-2-এ যেকোনো সংখ্যা উপস্থাপন করি তখন এটি শুধুমাত্র 0s এবং 1s এর ক্রমানুসারে রূপান্তরিত হয়, তাই এই ক্রমটির দৈর্ঘ্য সর্বদা অন্য যেকোন ভিত্তি উপস্থাপনের চেয়ে বেশি হবে এবং এর দৈর্ঘ্য হবে $\lfloor\log_2 m\;\rfloor+1$ এর সমান। সুতরাং একটি প্রদত্ত সংখ্যা পরীক্ষা করার জন্য N বেস b-এ 1 দিয়ে শুরু হয় বা না হয় আমরা m =1 থেকে m =$\lfloor\log_2 m\;\rfloor$ পর্যন্ত অতিক্রম করব এবং m-এর কোনও মানের জন্য N এর মধ্যে রয়েছে কিনা তা পরীক্ষা করব। ব্যাপ্তি b m ≤ N ≤ 2*b m - 1 বা না এবং সেই অনুযায়ী সত্য বা মিথ্যা ফেরত দিন।
উদাহরণ
#include <iostream> #include <cmath> using namespace std; bool isStartWithOne(int number, int base) { int m = log2(number); for (int i = 1; i <= m; i++) { if (number >= pow(base, i) && number <= 2 * pow(base, i) - 1) //if number is in the given range return true; } return false; } int main() { int num = 19, base = 16; if(isStartWithOne(num, base)){ cout << "Can be represented"; }else{ cout << "Can not be represented"; } }
আউটপুট
Can be represented