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

C++ में दाएं सबसे सेट बिट की स्थिति


इस समस्या में, हमें एक संख्या N दी गई है। हमारा कार्य संख्या के दाएं सबसे सेट बिट का इंडेक्स प्रिंट करना है।

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

इनपुट - 4

आउटपुट - 3

व्याख्या - 4 का बाइनरी 100 है, दाएं सबसे सेट बिट का इंडेक्स 3 है।

इस समस्या को हल करने के लिए, एक सरल समाधान संख्या को तब तक शिफ्ट करना होगा जब तक सेट बिट न मिल जाए लेकिन अगर संख्या बड़ी है तो इसमें बहुत गणना लग सकती है।

एक अधिक कुशल समाधान बूलियन बीजगणित का उपयोग करना होगा। इसके लिए हम पहले संख्या के 2 के पूरक की गणना करेंगे, यह संख्या के सभी बिट्स को फ्लिप कर देगा और पहले सेट बिट को वैसे ही छोड़ देगा। फिर हम संख्या और उसके 2 के पूरक का बिटवाइज़ AND निकालेंगे। इसका परिणाम केवल एक सेट बिट वाली संख्या होगी और वह स्थिति जो हम चाहते हैं। समाधान संख्या के log2 + 1 द्वारा दिया जाएगा।

यह समझने में थोड़ा जटिल लगता है, आइए इस विधि का उपयोग करके एक उदाहरण हल करें।

N = 10, बाइनरी = 1010
2 का पूरक, 0101
1010 & 0101 = 0010
log2(2) = 1
1+1 = 2 जो दिया गया इंडेक्स है।

उदाहरण

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

#include <iostream>
#include <math.h>
using namespace std;

void rightSetBit(int N) {
    int bitIndex = log2(N & -N) + 1;
    cout << bitIndex;
}

int main() {
    int N = 10;
    cout << "संख्या " << N << " का दाएं सबसे सेट बिट है: ";
    rightSetBit(N);
    return 0;
}

आउटपुट

संख्या 10 का दाएं सबसे सेट बिट है: 2
  1. - C++ में किसी संख्या के प्रत्येक सेट बिट के लिए दूसरी संख्या के बिट्स को टॉगल करें

    इस समस्या में, हमें दो पूर्णांक मान दिए गए हैं। हमारा कार्य एक C++ प्रोग्राम बनाना है जो यह ऑपरेशन करे: किसी संख्या के प्रत्येक सेट बिट के लिए दूसरी संख्या के बिट्स को टॉगल करें। समस्या को समझने के लिए एक उदाहरण लेते हैं इनपुट: 3 7 आउटपुट: 4 3 का बाइनरी: 011 7 का बाइनरी: 111 दूसरी संख्या के पहले और

  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस