两个数字的交替位以在C ++中创建一个新数字

在这个问题中,我们需要使用两个数字的交替位来生成一个数字。因此,在此问题中,我们将使用第二个数字中的第一个位,然后使用第一个中的第二个位,再次使用第二个数中的第三个位,再使用第一个中的第一个,依此类推。

从第一个开始,从第二个数字开始,再从第三个位开始,从第一个开始,依此类推。

让我们举个例子来更好地理解这个话题,

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

现在,通过这个示例,很明显,我们需要做些什么来解决代码。基本上,解决方案是从第二个数字的LSB开始的数字中获取备用位。

为了解决这个问题,一种可行的方法是找到第一个数字n的设置偶数位,然后找到第二个数字m的设置奇数位并返回两者的按位或。

算法

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.

示例

#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);

}

输出结果

25

以上是 两个数字的交替位以在C ++中创建一个新数字 的全部内容, 来源链接: utcz.com/z/316250.html

回到顶部