ในปัญหานี้ เราได้รับตัวเลข N หน้าที่ของเราคือพิมพ์ดัชนีของบิตที่ตั้งไว้ทางขวาสุดของตัวเลข
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล − 4
ผลผลิต − 3
คำอธิบาย − เลขฐานสองของ 4 คือ 100 ดัชนีของบิตเซ็ตขวาสุดคือ 3
ในการแก้ปัญหานี้ วิธีแก้ไขง่ายๆ ก็คือการเลื่อนตัวเลขจนกว่าจะพบบิตที่ตั้งไว้ แต่อาจต้องใช้การคำนวณมากหากจำนวนนั้นมาก
วิธีแก้ปัญหาที่มีประสิทธิภาพมากขึ้นคือการใช้พีชคณิตแบบบูล สำหรับสิ่งนี้เราจะคำนวณส่วนประกอบ 2 ของตัวเลขก่อน ซึ่งจะพลิกบิตทั้งหมดของตัวเลขออกจากบิตชุดแรกตามที่เป็นอยู่ จากนั้นเราจะคำนวณ bit-wise &ของตัวเลขและเป็นส่วนเสริมของ 2 ซึ่งจะส่งผลให้เป็นตัวเลขที่มีชุดบิตเพียงชุดเดียวและตำแหน่งที่เราต้องการ การแก้ปัญหาจะได้รับจาก log2 ของหมายเลข +1
ดูเหมือนว่าจะซับซ้อนเล็กน้อยที่จะเข้าใจ มาแก้ตัวอย่างโดยใช้วิธีนี้กัน
N= 10 , binary = 1010 2’s complement, 0101 1010 & 0101 = 0010 log2(2) = 1 1+1 = 2 which is the given index.
ตัวอย่าง
โปรแกรมแสดงการใช้งานโซลูชันของเรา
#include <iostream>
#include <math.h>
using namespace std;
void rightSetBit(int N) {
int bitIndex = log2(N & -N)+1;
cout<<bitIndex;
}
int main() {
int N = 10;
cout<<"The rightmost Set bit of the number "<<N<<" is : ";
rightSetBit(N);
return 0;
} ผลลัพธ์
The rightmost Set bit of the number 10 is : 2