কম্পিউটার

C++ এ দুটি সংখ্যার জন্য বামদিকের সবচেয়ে ভিন্ন-সদৃশ বিটের অবস্থান খুঁজুন


এই সমস্যায় আমাদের দুটি সংখ্যা দেওয়া হয়েছে, num1 এবং num2। আমাদের কাজ হল দুটি সংখ্যার জন্য বামদিকের অসম বিটের অবস্থান খুঁজে বের করা। আমাদের প্রথম বিটটি প্রিন্ট করতে হবে যা তাদের নিজ নিজ বাইনারি উপস্থাপনায় উভয় সংখ্যার জন্য একই নয়। বিটটি খুঁজে পেতে উভয়ের দৈর্ঘ্য একই হওয়া দরকার। এটি কম বিট সহ সংখ্যার শুরুতে 0 যোগ করে করা হয়।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট

num1 = 4, num2 = 7

আউটপুট

1

ব্যাখ্যা

4 এর বাইনারি উপস্থাপনা হল 100

7 এর বাইনারি উপস্থাপনা হল 111

প্রথম বিট একই নয়।

সমাধান পদ্ধতি

সমস্যা সমাধানের একটি পদ্ধতি হল প্রথমে 2 (বিট পার্থক্য) দিয়ে গুণ করে উভয় সংখ্যার বিটের সংখ্যা সমান করা। . এবং উভয় সংখ্যার XOR গ্রহণ যা শুধুমাত্র 1 প্রদান করবে যেখানে তাদের বিটগুলি ভিন্ন। সুতরাং, এই XOR-এ, আমরা প্রথম অবস্থানটি খুঁজে পাব এবং তারপরে 1 যোগ করলে প্রয়োজনীয় অবস্থান পাওয়া যায়।

অ্যালগরিদম

ধাপ 1 − শুধুমাত্র (2 ^ (বিট-দৈর্ঘ্যের পার্থক্য)) দ্বারা ছোট করে গুণ করে সংখ্যার বিটগুলিকে সমান করুন।

ধাপ 2 − num1 এবং num2 এ XOR অপারেশন সম্পাদন করুন।

ধাপ 3 − বিট পার্থক্য মোটের সমান (bitCount - 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++-এ একটি সাজানো না করা অ্যারেতে k নিকটতম সংখ্যাগুলি খুঁজুন

  2. C++ এ পুনরাবৃত্তি বা ইউক্লিডীয় অ্যালগরিদম ব্যবহার না করে দুটি সংখ্যার HCF খুঁজুন

  3. দুইটির বেশি (বা অ্যারে) সংখ্যার GCD-এর জন্য C++ প্রোগ্রাম?

  4. দুইটির বেশি (বা অ্যারে) সংখ্যার GCD 0 এর জন্য C++ প্রোগ্রাম?