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