এই সমস্যায়, আমাদের দুটি ধনাত্মক পূর্ণসংখ্যা N এবং M দেওয়া হয়েছে। আমাদের কাজ হল ডানদিকের বিটটি প্রিন্ট করা যা N এবং M যোগফলের বাইনারি যোগে প্রথম ক্যারি বিট তৈরি করে। .
সমস্যাটি বোঝার জন্য একটি উদাহরণ দেওয়া যাক,
ইনপুট − N =5, M =14
আউটপুট − 3
ব্যাখ্যা −
(5)2 = 0101 , (14)2 = 1110 Sum 0101 + 1110 10011
এই সমস্যা সমাধানের জন্য, আমরা বুলিয়ান বীজগণিত থেকে কিছু পর্যবেক্ষণ বিবেচনা করব।
উভয় সংখ্যা 1 হলে যোগফল একটি বহন উৎপন্ন করবে। সুতরাং, আমরা সমস্ত বিট খুঁজে পাব যেখানে বহন উৎপন্ন হয়। এটি উভয় সংখ্যার অনুসন্ধান এবং অপারেশন দ্বারা করা হবে। এবং সংখ্যার ডানদিকের অংশটি খুঁজে বের করুন।
এটি বোঝার জন্য কিছুটা জটিল বলে মনে হচ্ছে আসুন এই পদ্ধতিটি ব্যবহার করে একটি উদাহরণ সমাধান করি।
N = 5 and M = 14 N&M = 0100
এখানে একটি ডানদিকে সেট করা বিটটি সূচক 3 এ রয়েছে।
উদাহরণ
আমাদের সমাধানের বাস্তবায়ন দেখানোর জন্য প্রোগ্রাম,
#include <iostream> #include <math.h> using namespace std; int rightSetBit(int N) { int bitIndex = log2(N & -N)+1; return bitIndex; } void rightCarryBit(int N, int M) { int carryIndex = rightSetBit(N & M); cout<<carryIndex; } int main() { int N=4, M=14; cout<<"The position of rightmost bit that generates carry in the sum of "<<N<<" and "<<M<<" is "; rightCarryBit(N,M); return 0; }
আউটপুট
The position of rightmost bit that generates carry in the sum of 4 and 14 is 3