এই সমস্যাতে, দুটি পূর্ণসংখ্যা N এবং K দেওয়া আছে। আমাদের কাজ হলো সংখ্যা N-এর Kth সেট বিটের ইনডেক্স বের করা, ডান পাশ থেকে গণনা করে।
সেট বিটগুলো সংখ্যার বাইনারি রিপ্রেজেন্টেশন থেকে চেক করা হয়। বাইনারি রিপ্রেজেন্টেশনে ইনডেক্সিং ডান দিক থেকে ০ থেকে শুরু হয় এবং বাম দিকের দিকে এগিয়ে।
উদাহরণ - বাইনারি নম্বর '011101'-এ, ডান থেকে ইনডেক্স ০-তে ১ আছে, ইনডেক্স ১-তে ০, এবং সারি।
উদাহরণ:
ইনপুট - N = 6, K = 2
আউটপুট - 2
ব্যাখ্যা - 6-এর বাইনারি রিপ্রেজেন্টেশন 0110। ডান থেকে ২য় সেট বিট ইনডেক্স ২-তে।
সমাধানের জন্য, আমরা চেক করব বর্তমান বিট সেট কিনা, যদি সেট হয় তবে K-এর মান কমিয়ে দিব। প্রতিটি চেকের পর সংখ্যাকে ১ দিয়ে শিফ্ট করব, এতে পরবর্তী বিট मिलবে, এবং শিফ্ট কাউন্ট মেইনটেইন করব। একবার K ০ হলে, আমরা শিফ্ট কাউন্ট প্রিন্ট করব।
উদাহরণ
সমাধানের প্রোগ্রাম:
#include <iostream>
using namespace std;
int FindIndexKthBit(int N, int K) {
int index = 0;
while (N) {
if (N & 1)
K--;
if (!K)
return index;
index++;
N = N >> 1;
}
return -1;
}
int main() {
int N = 12, K = 2;
cout << "The " << K << "th set bit of the number " << N << " is at index : \t";
int index = FindIndexKthBit(N, K);
if (index != -1)
cout << index;
else
cout << "\nsorry no index found";
return 0;
} আউটপুট
The 2th set bit of the number 12 is at index : 3