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

C++ में दो नंबरों के लिए सबसे अधिक असमान बिट के बाएं स्थान का पता लगाएं

इस समस्या में हमें दो संख्याएँ, num1 और num2 दी गई हैं। हमारा कार्य दो संख्याओं के लिए सबसे बाईं ओर असमान बिट की स्थिति का पता लगाना है। हमें पहले बिट को प्रिंट करने की आवश्यकता है जो उनके संबंधित बाइनरी प्रतिनिधित्व में दोनों संख्याओं के लिए समान नहीं है। बिट को खोजने के लिए दोनों की लंबाई समान होनी चाहिए। यह कम बिट्स वाली संख्या की शुरुआत में 0 जोड़कर किया जाता है।

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

इनपुट

num1 = 4, num2 = 7

आउटपुट

1

स्पष्टीकरण

4 का बाइनरी प्रतिनिधित्व 100 है

7 का बाइनरी प्रतिनिधित्व 111 है

पहला बिट समान नहीं है।

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

समस्या को हल करने का एक तरीका यह है कि पहले दोनों संख्याओं में बिट्स की संख्या को 2 (बिट अंतर) से गुणा करके बराबर किया जाए। . और दोनों नंबरों का एक्सओआर लेना जो केवल उन जगहों पर 1 लौटाएगा जहां उनके बिट्स अलग हैं। तो, इस एक्सओआर में, हम पहली स्थिति पाएंगे और फिर इसमें 1 जोड़ने से आवश्यक स्थिति मिलती है।

एल्गोरिदम

चरण 1 - संख्याओं के बिट्स को केवल (2 ^ (बिट-लम्बाई अंतर)) से छोटा करके गुणा करके बराबर करें।

चरण 2 - num1 और num2 पर XOR ऑपरेशन करें।

चरण 3 - बिट अंतर कुल के बराबर है (बिटकाउंट - XORbitCount + 1)।

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

उदाहरण

#include <iostream>
#include <math.h>
using namespace std;
int findmisMatchBit(int num1, int num2) {
   if (num1 == num2)
      return 0;
   int num1Size = floor(log2(num1)) + 1;
   int num2Size = floor(log2(num2)) + 1;
   int BitSizeDiff = abs(num1Size - num2Size);
   int maxBitSize = max(num1Size, num2Size);
   if (num1Size > num2Size)
      num2 *= pow(2, BitSizeDiff);
   else
      num1 *= pow(2, BitSizeDiff);
   int XOR = num1 ^ num2;
   int XORBitSize = floor(log2(XOR)) + 1;
   return (maxBitSize - XORBitSize + 1);
}
int main() {
   int num1 = 43, num2 = 765;
   cout<<"The position of leftmost dis-similar bit of the two
   number is "<<findmisMatchBit(num1, num2);
   return 0;
}

आउटपुट

The position of leftmost dis-similar bit of the two number is 4

  1. C++ में रिकर्सन या यूक्लिडियन एल्गोरिथम का उपयोग किए बिना दो संख्याओं का HCF ज्ञात कीजिए

    जैसा कि हम जानते हैं, यूक्लिडियन एल्गोरिथम का उपयोग करके एचसीएफ या जीसीडी की गणना आसानी से की जा सकती है। लेकिन यहां हम देखेंगे कि यूक्लिडियन एल्गोरिथम, या किसी पुनरावर्ती एल्गोरिथम का उपयोग किए बिना जीसीडी या एचसीएफ कैसे उत्पन्न करें। मान लीजिए कि दो संख्याएँ 16 और 24 के रूप में मौजूद हैं। इन दोनों

  1. दो से अधिक (या सरणी) संख्याओं के GCD के लिए C++ प्रोग्राम?

    दो संख्याओं का सार्व भाजक वे संख्याएँ होती हैं जो उन दोनों की भाजक होती हैं। उदाहरण के लिए, 12 के भाजक 1, 2, 3, 4, 6, 12 हैं। 18 के भाजक 1, 2, 3, 6, 9, 18 हैं। इस प्रकार, 12 और 18 के उभयनिष्ठ भाजक 1, 2 हैं। , 3, 6। इनमें से सबसे बड़ा, शायद आश्चर्यजनक रूप से, 12 और 18 का कहा जाता है। दो पूर्णांकों a

  1. दो से अधिक (या सरणी) संख्याओं के जीसीडी 0 के लिए सी++ प्रोग्राम?

    यहाँ हम देखेंगे कि कैसे हम दो से अधिक संख्याओं की gcd प्राप्त कर सकते हैं। दो संख्याओं का gcd खोजना आसान है। जब हम दो से अधिक संख्याओं का gcd ज्ञात करना चाहते हैं, तो हमें gcd के साहचर्यता नियम का पालन करना होगा। उदाहरण के लिए, यदि हम {w, x, y, z} का gcd खोजना चाहते हैं, तो यह {gcd(w,x), y, z} होगा,