ในปัญหานี้ เราได้รับตัวเลขสองตัว N และ M งานของเราคือหาดัชนีของบิตขวาสุดที่ต่างกันในการแทนค่าไบนารีของตัวเลข
มาดูตัวอย่างเพื่อเข้าใจปัญหา:
Input - N = 12 , M = 9
Output - 2
Explanation - (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