हमें एक धनात्मक पूर्णांक N दिया गया है। लक्ष्य N से कम या बराबर उन संख्याओं की गणना करना है जिनके बाइनरी प्रतिनिधित्व में सभी 1s एक साथ हों। उदाहरण के लिए 1 है 1, 3 है 11, 7 है 111, 15 है 1111... इत्यादि।
यदि हम संख्याओं को देखें तो ये सभी 2^i - 1 के रूप में हैं। जहां i 1 से शुरू होता है। ऐसी संख्याओं की जांच करने के लिए जो n से कम हैं, हम तुलना करेंगे यदि 2^i - 1 <= n। फिर काउंट बढ़ाएंगे।
उदाहरण से समझते हैं
इनपुट - N=15
आउटपुट - बाइनरी में सभी 1s वाली संख्याएं: 4
व्याख्या - संख्याएं होंगी 1, 3, 7, 15
इनपुट - N=50
आउटपुट - बाइनरी में सभी 1s वाली संख्याएं: 5
व्याख्या - संख्याएं होंगी 1, 3, 7, 15, 31
नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण
हम एक धनात्मक पूर्णांक N लेते हैं।
फ़ंक्शन allOnes(int n) n को इनपुट के रूप में लेता है और उन संख्याओं को लौटाता है जिनके बाइनरी प्रतिनिधित्व में सभी 1s हों।
प्रारंभिक चर count को 0 से आरंभ करें ऐसी संख्याओं के लिए।
i=1 से i<=n तक फॉर लूप का उपयोग करके पार करें।
प्रत्येक i के लिए, यदि pow(2,i)-1, n से कम या बराबर है तो काउंट बढ़ाएं।
फॉर लूप के अंत में काउंट को परिणाम के रूप में लौटाएं।
उदाहरण
#include <bits/stdc++.h> using namespace std; int allOnes(int n){ int count = 0; for(int i=1;i<=n;i++){ if(n>=pow(2,i)-1){ count++; //cout<<" "<<pow(2,i)-1; } } return count; } int main(){ int N=23; cout <<endl<< "बाइनरी में सभी 1s वाली संख्याएं: "<<allOnes(N); return 0; } आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा -
बाइनरी में सभी 1s वाली संख्याएं: 4