ในปัญหานี้ เราได้รับสองจำนวนเต็ม N และ K หน้าที่ของเราคือค้นหาดัชนีของ K th กำหนดเลข N เล็กน้อย นับจากขวา
ชุดบิตจะถูกตรวจสอบจากการแทนค่าไบนารีของตัวเลข การทำดัชนีในรูปแบบไบนารีเริ่มต้นจากดัชนี 0 จากทิศทางที่ถูกต้องและแพร่กระจายไปทางซ้าย
ตัวอย่าง - ในเลขฐานสอง '0111101' ที่ดัชนี 0 จากด้านขวา เรามี 1 ที่ดัชนี 1 จากด้านขวา เรามี 0 ไปเรื่อยๆ
ทีนี้มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล − N =6, K =2
ผลผลิต − 2
คำอธิบาย − การแทนค่าเลขฐานสองของ 6 คือ 0110 ชุดบิตที่ 2 จากด้านขวาจะอยู่ที่ดัชนี 2
เพื่อแก้ปัญหานี้ เราจะต้องตรวจสอบว่าบิตปัจจุบันถูกตั้งค่าหรือไม่ หากใช่ เราจะลดค่า K หลังจากตรวจสอบทุกครั้ง เราจะเปลี่ยนหมายเลข bt 1 ซึ่งจะให้บิตถัดไปเช่นกัน จะรักษาจำนวนกะที่ทำไว้ เมื่อค่าของ K กลายเป็น 0 เราจะพิมพ์จำนวนกะที่ทำเสร็จแล้ว
ตัวอย่าง
โปรแกรมแสดงการใช้งานตรรกะของเรา
#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