हमारे पास एक संख्या N और एक बेस b है। इस प्रोग्राम में हमें जांचना है कि क्या संख्या बेस b में 1 से शुरू होती है या नहीं। मान लीजिए संख्या 6 दी गई है। बाइनरी में यह 110 है, तो यह 1 से शुरू होती है, बेस 4 में भी यह 12₄ होगी। यहां भी यह 1 से शुरू होती है।
जैसा कि हम जानते हैं, यदि संख्या N को बेस b में दर्शाया जाता है, तो b, m+1 बिट अनुक्रम bm bm-1 ... b0 में परिवर्तित हो जाता है। इसका तात्पर्य है b_m * b^m + b_{m-1} * b^{m-1} + ... + b_0 * b^0 = N। सबसे बड़ी संख्या 2*b^m - 1 होगी। N, b^m ≤ N ≤ 2*b^m - 1 की सीमा में आता है। एक और बात ध्यान देने योग्य है कि m, ⌊log₂ m⌋ से अधिक नहीं हो सकता क्योंकि जब हम किसी संख्या को बेस-2 में दर्शाते हैं तो यह केवल 0 और 1 के अनुक्रम में परिवर्तित हो जाती है, इसलिए इस अनुक्रम की लंबाई हमेशा किसी अन्य बेस प्रतिनिधित्व से अधिक होगी और इसकी लंबाई ⌊log₂ m⌋+1 के बराबर होगी। तो दी गई संख्या N बेस b में 1 से शुरू होती है या नहीं जांचने के लिए हम m = 1 से m = ⌊log₂ m⌋ तक पार करेंगे और जांचेंगे कि क्या m के किसी मान के लिए, N, b^m ≤ N ≤ 2*b^m - 1 की सीमा में आता है या नहीं और तदनुसार True या False लौटाएंगे।
उदाहरण
#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) // यदि संख्या दी गई सीमा में है
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