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

C++ में रेंज में सेट बिट्स की गणना


हमें एक पूर्णांक संख्या दी गई है, मान लीजिए num और बाएं और दाएं मानों के साथ एक रेंज। कार्य सबसे पहले संख्या का बाइनरी अंक गणना करना है और फिर बाएं अंक से दाएं अंक तक लूप सेट करना है और दी गई रेंज में सेट बिट्स की गणना करना है।

बाइनरी संख्या में सेट बिट्स को 1 द्वारा दर्शाया जाता है। जब भी हम एक पूर्णांक मान की बाइनरी संख्या की गणना करते हैं तो यह 0 और 1 के संयोजन के रूप में बनती है। इसलिए, कंप्यूटर के संदर्भ में अंक 1 को सेट बिट के रूप में जाना जाता है।

इनपुट - int number = 50, left = 2, right = 5

आउटपुट - रेंज में कुल सेट बिट्स की संख्या - 2

व्याख्या - संख्या 50 का बाइनरी प्रतिनिधित्व 110010 है और हमारे पास left = 2 से शुरू होने वाली रेंज है जिसमें बिट 1 है और right = 5 पर समाप्त होती है जिसमें बिट 1 है और बीच की रेंज में केवल 0 हैं। तो गिनती 2 है।

उपयोग किया गया दृष्टिकोण

  • संख्या को पूर्णांक प्रकार के चर में इनपुट करें और बाएं और दाएं पूर्णांक मानों के साथ रेंज भी।
  • unsigned int प्रकार का एक चर count घोषित करें जो सेट बिट्स की कुल गिनती संग्रहीत करेगा
  • i से 1<<7 और i > 0 और i को i/2 तक लूप FOR शुरू करें
  • लूप के अंदर, जांचें num & 1 == TRUE तो 1 प्रिंट करें अन्यथा 0 प्रिंट करें
  • संख्या 0 न होने तक कुल बिट्स की गणना के लिए while लूप शुरू करें
  • लूप के अंदर, count = count + number & 1 सेट करें और number >>= 1 भी सेट करें
  • एक अस्थायी चर a = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1) सेट करें
  • count = count & a भी सेट करें
  • काउंट प्रिंट करें

C++ कार्यान्वयन

#include <iostream>
using namespace std;

// Count total bits in a range
unsigned int bits(unsigned int number, unsigned int left, unsigned int right) {
    unsigned int count = 0;
    unsigned i;
    // display the total 8-bit number
    cout << "8-bit digits of " << number << " is: ";
    for (i = 1 << 7; i > 0; i = i / 2) {
        (number & i) ? cout << "1" : cout << "0";
    }
    // calculate the total bits in a number
    while (number) {
        count += number & 1;
        number >>= 1;
    }
    // calculate the set bit in a range
    int a = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1);
    count = count & a;
    cout << "\nCount of total set bits in a range are: " << count;
}

int main() {
    unsigned int number = 42;
    unsigned int left = 2, right = 5;
    bits(number, left, right);
    return 0;
}

आउटपुट

8-bit digits of 42 is: 00101010 Count of total set bits in a range are: 2
  1. C में फ्लोटिंग पॉइंट संख्या में सेट बिट्स गिनना C में फ्लोटिंग पॉइंट संख्या में सेट बिट्स गिनना

    इस समस्या में एक फ्लोटिंग पॉइंट मान दिया गया है। हमें इसके बाइनरी प्रतिनिधित्व में सेट बिट्स की संख्या ढूंढनी है। उदाहरण के लिए, यदि एक फ्लोटिंग पॉइंट संख्या 0.15625 है तो इसमें छह सेट बिट्स हैं। एक सामान्य C कंपाइलर सिंगल प्रिसिजन फ्लोटिंग पॉइंट प्रतिनिधित्व का उपयोग करता है। तो यह इस तरह दिखेगा।

  1. - C++ में समान सेट बिट्स के साथ अगली बड़ी संख्या

    हमें एक संख्या n दी गई है, हमें वह संख्या ज्ञात करनी है जो n से बड़ी है और जिसमें n के बाइनरी प्रतिनिधित्व के समान सेट बिट्स हैं। बाइनरी प्रतिनिधित्व में अंक 1 को सेट बिट कहा जाता है। आइए एक उदाहरण देखते हैं। इनपुट 124 आउटपुट 143 एल्गोरिदम संख्या n आरंभ करें। सेट बिट्स की संख्या की गणना प्राप्त

  1. C++ में एक सेट को k उपसमुच्चयों में विभाजित करने के तरीकों की संख्या गिनें C++ में एक सेट को k उपसमुच्चयों में विभाजित करने के तरीकों की संख्या गिनें

    समस्या विवरण दो संख्याएं e और p दी गई हैं। लक्ष्य उन तरीकों की संख्या गिनना है जिनसे हम एक सेट के e तत्वों को p पार्टीशन/उपसमुच्चयों में विभाजित कर सकते हैं। उदाहरण इनपुट e=4 p=2 आउटपुट सेट को k उपसमुच्चयों में विभाजित करने के तरीकों की संख्या: 7 व्याख्या यदि तत्व हैं: a b c d तो उन्हें 2 पार्टीशन