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

ตำแหน่งบิตขวาสุดที่เหมือนกันในสองตัวเลขใน C++

ในปัญหานี้ เราได้รับตัวเลขสองตัว M และ N งานของเราคือพิมพ์ตำแหน่ง (ดัชนี) ของบิตขวาสุดที่เหมือนกันของสองตัวเลข

มาดูตัวอย่างเพื่อเข้าใจปัญหา:

Input - N = 4 , M = 7

Output - 3

Explanation - (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