এই সমস্যাতে, দুটি ধনাত্মক পূর্ণসংখ্যা N এবং M দেওয়া আছে। আমাদের কাজ হলো N এবং M-এর বাইনারি যোগফলে প্রথম ক্যারি বিট তৈরি করার ডানপাশের বিটের পজিশন প্রিন্ট করা।
উদাহরণ:
ইনপুট - N = 5, M = 14
আউটপুট - 3
ব্যাখ্যা -
(5)2 = 0101 , (14)2 = 1110 Sum 0101 + 1110 = 10011
সমাধানের জন্য, আমরা বুলিয়ান বীজগণিতের কিছু পর্যবেক্ষণ বিবেচনা করব।
যোগফলে ক্যারি তখন তৈরি হবে যখন দুটি সংখ্যাও ১ হবে। তাই আমরা সব বিত খুঁজে বের করব যেখানে ক্যারি তৈরি হচ্ছে। এটি করার জন্য দুটি সংখ্যার AND অপারেশন করব। এবং তারপর সংখ্যার ডানপাশের সেট বিট বের করব।
এটি একটু জটিল মনে হতে পারে, চলুন এই পদ্ধতিতে একটি উদাহরণ সমাধান করি।
N = 5 and M = 14 N&M = 0100
এখানে ডানপাশের সেট বিট ইনডেক্স ৩-তে।
উদাহরণ
সমাধানের প্রোগ্রাম:
#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