Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตำแหน่งของบิตชุดที่ K เป็นตัวเลขใน C++


ในปัญหานี้ เราได้รับสองจำนวนเต็ม 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