কম্পিউটার

C++ এ দুটি সংখ্যার ডানদিকের সাধারণ বিটের অবস্থান


এই সমস্যায়, আমাদের দুটি সংখ্যা দেওয়া হয়েছে M এবং N। আমাদের কাজ হল দুটি সংখ্যার ডানদিকের সাধারণ বিটের অবস্থান (সূচী) প্রিন্ট করা।

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

ইনপুট − N =4 , M =7

আউটপুট − 3

ব্যাখ্যা − (4)2 =100 , (7)2 =111. ডানদিকের সাধারণ বিটটি হল সূচক 3 এ৷

এই সমস্যাটি সমাধান করার জন্য, আমাদের সংখ্যার সমস্ত একই বিট খুঁজে বের করতে হবে। সমস্ত একই বিট খুঁজতে আমরা M এবং N-এর xor খুঁজে পাব। তারপর M^N-এর নেগেশানে আমরা সবচেয়ে ডানদিকের বিটটি খুঁজে পাব।

এটি বোঝার জন্য কিছুটা জটিল বলে মনে হচ্ছে আসুন এই পদ্ধতিটি ব্যবহার করে একটি উদাহরণ সমাধান করি।

N = 4 , M = 7
~N^M = 100.

এখানে একটি ডানদিকে সেট করা বিটটি সূচক 3 এ রয়েছে।

উদাহরণ

আমাদের সমাধানের বাস্তবায়ন দেখানোর জন্য প্রোগ্রাম,

#include <iostream>
#include <math.h>
using namespace std;
int rightSetBit(int N) {
   int bitIndex = log2(N & -N)+1;
   return bitIndex;
}
void rightSameBit(int m, int n) {
   int diffBit = rightSetBit(~(m^n));
   cout<<diffBit;
}
int main() {
   int N = 4, M = 7;
   cout<<"Postiion of first right same bit of the number "<<N<<" & "<<M<<" is ";
   rightSameBit(N, M);
   return 0;
}

আউটপুট

Postiion of first right same bit of the number 4 & 7 is 3

  1. দুটি সংখ্যার সাধারণ ভাজকের জন্য C++ প্রোগ্রাম?

  2. C++ দুইটি সংখ্যাকে গুণ করার জন্য প্রোগ্রাম

  3. দুই নম্বর অদলবদল করতে C++ প্রোগ্রাম

  4. দুই নম্বর যোগ করার জন্য C++ প্রোগ্রাম