Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ में एकमात्र सेट बिट की स्थिति खोजें

इस समस्या में हमें एक संख्या N दी गई है जिसका बाइनरी प्रतिनिधित्व में केवल एक सेट बिट है। हमारा काम केवल सेट बिट की स्थिति का पता लगाना है। यदि संख्या में केवल एक सेट बिट है तो संख्या की स्थिति लौटा दें अन्यथा अमान्य संख्या मुद्रित करें।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

N = 32

आउटपुट

6

स्पष्टीकरण

Binary representation of the number is 10000.

समाधान दृष्टिकोण

आगे बढ़ने से पहले जानने के लिए एक तथ्य यह है कि संख्या में केवल 1 सेट बिट होगा यदि यह 2 की शक्ति है। अन्यथा इसमें अधिक संख्या में सेट बिट्स होंगे।

एक सरल उपाय यह है कि सबसे दाहिने बिट से शुरू करें और फिर बिट्स के मूल्य की जांच करें। हम लूप का उपयोग यह जांचने के लिए करेंगे कि यह सेट है या नहीं।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include <iostream>
using namespace std;
bool isPowerOfTwo(unsigned n) {
   if(n>0) {
      while(n%2 == 0)
      n/=2;
      if(n == 1)
         return true;
   }
   if(n == 0 || n != 1)
      return false;
   return false;
}
int findPostionOfSetBit(unsigned n) {
   unsigned i = 1, position = 1;
   while (!(i & n)) {
      i = i << 1;
      ++position;
   }
   return position;
}
int main(void){
   int n = 64;
   if(!isPowerOfTwo(n))
      cout<<"Invalid Number!";
   else
      cout<<"The position of the number "<<n<<" is "<<findPostionOfSetBit(n);
   return 0;
}

आउटपुट

The position of the number 64 is 7

समस्या को हल करने का एक वैकल्पिक तरीका यह है कि शिफ्ट ऑपरेशन का उपयोग करके संख्या को 0 होने तक दाईं ओर शिफ्ट किया जाए। अंत में 0 तक पहुंचने के लिए की गई शिफ्ट की संख्या सेट बिट की स्थिति है।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include <iostream>
using namespace std;
bool isPowerOfTwo(unsigned n) {
   if(n>0) {
      while(n%2 == 0)
         n/=2;
      if(n == 1)
         return true;
   }
   if(n == 0 || n != 1)
      return false;
   return false;
}
int findPostionOfSetBit(unsigned n) {
   unsigned position = 0;
   while (n) {
      n = n >> 1;
      ++position;
   }
   return position;
}
int main(void){
   int n = 64;
   if(!isPowerOfTwo(n))
      cout<<"Invalid Number!";
   else
      cout<<"The position of the number "<<n<<" is
      "<<findPostionOfSetBit(n);
   return 0;
}

आउटपुट

The position of the number 64 is 7

समस्या को हल करने का एक और तरीका गणित के सूत्रों का उपयोग करना है। हम जानते हैं कि,

2i = n, where n is the number
and i is the position of the number
The values of i here can be found using the formula,
i = log2(n)

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include <iostream>
#include <math.h>
using namespace std;
bool isPowerOfTwo(unsigned n) {
   if(n>0) {
      while(n%2 == 0)
         n/=2;
      if(n == 1)
         return true;
   }
   if(n == 0 || n != 1)
      return false;
   return false;
}
int findPostionOfSetBit(unsigned n) {
   unsigned position = log2(n) + 1; ;
   return position;
}
int main(void){
   int n = 64;
   if(!isPowerOfTwo(n))
      cout<<"Invalid Number!";
   else
      cout<<"The position of the number "<<n<<" is "<<findPostionOfSetBit(n);
   return 0;
}

आउटपुट

The position of the number 64 is 7

  1. C++ का उपयोग करके एक स्ट्रिंग के सबस्ट्रिंग की संख्या ज्ञात करें

    इस लेख में, आप किसी दिए गए स्ट्रिंग में बनाए जा सकने वाले सबस्ट्रिंग (गैर-रिक्त) की संख्या को खोजने के तरीकों के बारे में जानेंगे। Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, &lsqu

  1. C++ . का उपयोग करके स्टॉपिंग स्टेशनों की संख्या ज्ञात कीजिए

    बिंदु X और Y के बीच मध्यवर्ती ट्रेन स्टेशनों की संख्या n है। गिनें कि अलग-अलग तरीकों से ट्रेनों को s स्टेशनों पर रुकने के लिए व्यवस्थित किया जा सकता है जैसे कि कोई भी दो स्टेशन एक दूसरे के बगल में नहीं हैं। तो इस लेख में, हम स्टॉपिंग स्टेशनों की संख्या का पता लगाने के लिए हर संभव तरीके की व्याख्या क

  1. C++ का उपयोग करके सेट पर रिफ्लेक्सिव रिलेशंस की संख्या ज्ञात करें

    इस लेख में, हम एक सेट पर रिफ्लेक्सिव संबंधों की संख्या को खोजने के तरीकों की व्याख्या करेंगे। इस समस्या में, हमें संख्या n दी गई है, और n प्राकृत संख्याओं के समुच्चय पर, हमें प्रतिवर्ती संबंधों की संख्या निर्धारित करनी होगी। चिंतनशील संबंध − समुच्चय A में एक संबंध प्रतिवर्ती कहलाता है यदि (a, a) R