ในปัญหานี้ เราได้รับตัวเลข M และ N สองตัว หน้าที่ของเราคือพิมพ์ตำแหน่ง (ดัชนี) ของบิตร่วมทางขวาสุดของตัวเลขทั้งสอง
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล − N =4 , M =7
ผลผลิต − 3
คำอธิบาย − (4)2 =100 , (7)2 =111 บิตร่วมขวาสุดอยู่ที่ดัชนี 3
เพื่อแก้ปัญหานี้ เราจะต้องค้นหาบิตของตัวเลขที่เหมือนกันทั้งหมด ในการค้นหาบิตเดียวกันทั้งหมด เราจะพบ xor ของ M และ N จากนั้นเราจะพบบิตขวาสุดในการปฏิเสธของ M^N
ดูเหมือนว่าจะซับซ้อนเล็กน้อยที่จะเข้าใจ มาแก้ตัวอย่างโดยใช้วิธีนี้กัน
N = 4 , M = 7 ~N^M = 100.
บิตเซ็ตขวาสุดที่นี่อยู่ที่ดัชนี 3
ตัวอย่าง
โปรแกรมแสดงการใช้งานโซลูชันของเรา
#include <iostream> #include <math.h> using namespace std; int rightSetBit(int N) { int bitIndex = log2(N & -N)+1; return bitIndex; } void rightSameBit(int m, int n) { int diffBit = rightSetBit(~(m^n)); cout<<diffBit; } int main() { int N = 4, M = 7; cout<<"Postiion of first right same bit of the number "<<N<<" & "<<M<<" is "; rightSameBit(N, M); return 0; }
ผลลัพธ์
Postiion of first right same bit of the number 4 & 7 is 3