আমাদের একটি সংখ্যা 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