हमारे पास एक संख्या N और एक आधार b है। इस प्रोग्राम में हमें यह जांचना होता है कि आधार बी में नंबर 1 से शुरू हो रहा है या नहीं। मान लीजिए कि एक संख्या 6 दी गई है। बाइनरी में यह 110 है, इसलिए यह 1 से शुरू होता है, आधार 4 में भी यह 124 . होगा . यहाँ भी यह 1 से शुरू होता है।
जैसा कि हम जानते हैं, यदि किसी संख्या N को आधार b में दर्शाया जाता है, तो b, m+1 बिट अनुक्रम bm bm-1… b0 में परिवर्तित हो जाता है। इसका मतलब है bm बी एम + ख<उप>एम-1उप> * बी m-1 + … + ख<उप>0उप> *बी 0 =N. सबसे बड़ी संख्या 2*b m . होगी – 1. N, b m . में स्थित है ≤ एन ≤ 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 निहित है रेंज बी m ≤ एन ≤ 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