Computer >> Máy Tính >  >> Lập trình >> C ++

Các bit thay thế của hai số để tạo một số mới trong C ++

Trong sự cố này, chúng ta cần tạo một số bằng cách sử dụng các bit thay thế của hai số . Vì vậy, trong bài toán này, chúng tôi sẽ sử dụng bit đầu tiên từ số thứ hai, sau đó là bit thứ hai từ số đầu tiên, bit thứ ba một lần nữa từ số thứ hai và tiếp tục từ số đầu tiên, v.v.

Từ đầu tiên, bit thứ ba một lần nữa từ số thứ hai và tiếp tục từ số đầu tiên và tiếp tục như vậy.

Hãy lấy một ví dụ để hiểu chủ đề tốt hơn,

Input : n = 6 m = 10
Output : 2
Explanation :
Bits representation of 6 = 0110
Bit representation of 10 = 1010
0 1 1 0
^ ^
1 0 1 0
^ ^
= 0 0 1 0 = 2

Bây giờ, thông qua ví dụ này, điểm rõ ràng là chúng ta cần làm gì để giải mã. Về cơ bản, giải pháp là lấy các bit thay thế từ các số bắt đầu từ LSB của số thứ hai.

Để giải quyết vấn đề này, một cách tiếp cận khả thi là tìm các bit chẵn của số đầu tiên n và sau đó tìm tập hợp các bit lẻ của số thứ hai m và trả về bitwise HOẶC của cả hai.

Thuật toán

Step 1 : For n find the value of set even bits.
Step 2 : For m find the value of set odd bits.
Step 3 : Calculate the result = set even bits of n | set odd bits of m.
Step 4: Print the value of result.

Ví dụ

#include <iostream>
using namespace std;
int setevenbits(int n) ;
int setoddbits(int m) ;
int main(){
   int n = 12;
   int m = 17;
   int setn = setevenbits(n);
   int setm = setoddbits(m);
   int result = ( setn | setm );
   cout<<result;
   return 0;
}
int setevenbits(int n){
   int temp = n;
   int count = 0;
   int res = 0;
   for (temp = n; temp > 0; temp >>= 1) {
      if (count % 2 == 1)
         res |= (1 << count);
      count++;
   }
   return (n & res);
}
int setoddbits(int m){
   int count = 0;
   int res = 0;
   for (int temp = m; temp > 0; temp >>= 1) {
      if (count % 2 == 0)
         res |= (1 << count);
      count++;
   }
   return (m & res);
}

Đầu ra

25