हमें एक संख्या दी गई है और कार्य 0 से लेकर दी गई संख्या तक संख्याओं की गणना करना है, मान लें कि संख्या बिल्कुल एक सेट बिट है
बाइनरी संख्या में सेट बिट्स को 1 द्वारा दर्शाया जाता है। जब भी हम किसी पूर्णांक मान की बाइनरी संख्या की गणना करते हैं तो यह 0 और 1 के संयोजन के रूप में बनता है। तो, अंक 1 को कंप्यूटर के संदर्भ में सेट बिट के रूप में जाना जाता है।
इनपुट - इंट संख्या =15
आउटपुट − [0, 15] की सीमा में केवल 1 सेट बिट वाली संख्याओं की संख्या है − 4
स्पष्टीकरण - दी गई संख्या 15 है इसलिए परिसर 0-15 है। अब 4 अंकों की गणना करें
−
. के लिए द्विआधारी संख्या0 -> 0000 =0 सेट बिट, 1 -> 0001 =1 सेट बिट, 2 -> 0010 =1 सेट बिट, 3 -> 0011 =2 सेट बिट, 4 -> 0100 =1 सेट बिट, 5 -> 0101 =2 सेट बिट, 6 -> 0110 =2 सेट बिट, 7 -> 0111 =3 सेट बिट, 8 -> 1000 =1 सेट बिट, 1 -> 1001 =2 सेट बिट, 10 -> 1010 =2 सेट बिट, 11 -> 1011 =3 सेट बिट, 12 -> 1100 =2 सेट बिट, 13 -> 1101 =3 सेट बिट, 14 -> 1110 =3 सेट बिट, 15 -> 1111 =4 सेट बिट। अब, हम ठीक एक सेट बिट्स वाली संख्याओं का चयन करेंगे और वे 1, 2, 4 और 8 हैं।
इनपुट - इंट संख्या =4
आउटपुट − [0, 15] की सीमा में केवल 1 सेट बिट वाली संख्याओं की संख्या − 3
. हैस्पष्टीकरण - दी गई संख्या 4 है इसलिए परिसर 0-4 है। अब 4 अंकों की बाइनरी की गणना करें
−
. के लिए नंबर0 -> 0000 =0 सेट बिट, 1 -> 0001 =1 सेट बिट, 2 -> 0010 =1 सेट बिट, 3 -> 0011 =2 सेट बिट, 4 -> 0100 =1 सेट बिट। अब, हम ठीक एक सेट बिट्स वाली संख्याओं का चयन करेंगे और वे 1, 2 और 4 हैं।
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
दी गई समस्या को हल करने के लिए कई दृष्टिकोण हो सकते हैं जैसे कि सरल दृष्टिकोण और कुशल दृष्टिकोण। तो आइए सबसे पहले भोले दृष्टिकोण . को देखें ।
-
नंबर दर्ज करें और इसे आगे की प्रक्रिया के लिए फ़ंक्शन में पास करें।
-
श्रेणी में संख्याओं की संख्या को ठीक 1 के रूप में सेट बिट के साथ संग्रहीत करने के लिए एक अस्थायी चर गणना लें
-
I से 1 तक की संख्या तक के लिए लूप प्रारंभ करें
-
लूप के अंदर, '__builtin_popcount(i)' के साथ एक अस्थायी चर सेट करें, वह फ़ंक्शन जो सेट बिट्स की संख्या देता है।
-
IF temp =1 जांचें, फिर गिनती बढ़ाएं
-
वापसी की संख्या
-
प्रिंट परिणाम
कुशल तरीका
-
नंबर दर्ज करें और इसे आगे की प्रक्रिया के लिए फ़ंक्शन में पास करें।
-
श्रेणी में संख्याओं की संख्या को ठीक 1 के रूप में सेट बिट के साथ संग्रहीत करने के लिए एक अस्थायी चर गणना लें
-
लूप प्रारंभ करें जबकि अस्थायी से अस्थायी <=संख्या
. तक -
लूप के अंदर, गिनती को 1 से बढ़ाएं और अस्थायी को अस्थायी * 2 के रूप में सेट करें
-
वापसी की संख्या
-
प्रिंट परिणाम
उदाहरण (बेवकूफ दृष्टिकोण)
#include <iostream> using namespace std; //function to Count of numbers having only 1 set bit in the range [0, n] int set_bits(int number){ int count = 0; for (int i = 1; i <= number; i++){ int temp = __builtin_popcount(i); if (temp == 1){ count++; } } return count; } int main(){ int number = 15; cout<<"Count of numbers having only 1 set bit in the range [0, "<<number<<"] are: "<<set_bits(number); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Count of numbers having only 1 set bit in the range [0, 15] are: 4
उदाहरण (कुशल दृष्टिकोण)
#include <iostream> using namespace std; //function to Count of numbers having only 1 set bit in the range [0, n] int set_bits(int number){ int count = 0; int temp = 1; while(temp <= number){ count++; temp = temp *2; } return count; } int main(){ int number = 15; cout<<"Count of numbers having only 1 set bit in the range [0, "<<number<<"] are: "<<set_bits(number); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Count of numbers having only 1 set bit in the range [0, 15] are: 4