使用位运算 AND 在 C++ 中将 0 转换为 X 的最大步骤数


在这个问题中,我们给定一个整数 X。我们的任务是找到从 0 转换为 X 的总步骤数。

有效转换 - 当从 A 转换为 B 时,计算一步。转换发生的条件是 A != B 且 A & B = A (& 是按位 AND)。因此,一步是从 A 转换为 B,我们必须创建一个程序来计算从 0 转换为 X 的最大步骤数。

让我们举个例子来理解这个问题:

输入 - X = 7

输出 - 3

解释 -

我们必须从 0 转换为 7。

Steps taken will be
Step1: 0(00) to 1(01) , 0!= 1 and 0&1 = 0, transform 00=>01
Step2: 1(001) to 3(011) , 1!= 3 and 1&3 = 1, transform 001=>011
Step3: 3(0011) to 7(0111) , 3!= 7 and 3&7 = 3, tranform 0011=>0111.

为了解决这个问题,我们将计算 X 中设置位的数量,这将给出从 0 到 X 的最大转换。

由于我们需要最大转换,我们必须逐步进行每个设置位(值为 1 的位)的转换。逐位转换将给出从 0 到 X 的最大步骤。

在从 A 到 B 的转换中,A 的所有设置位都应该在 B 中设置,但反过来不一定。因此,最小转换可以为 1,因为 0 中没有设置位,这使得最小的转换是直接的。

正如我们在所举的例子中看到的,对数字及其按位 AND 的二进制转换。

示例

显示我们解决方案实现的程序:

// 程序:使用位运算 AND 在 C++ 中查找从 0 到 X 的最大转换步骤

 在线演示

#include <bits/stdc++.h>
using namespace std;
int maxtransformation(int x){
   int steps = 0;
   // counting number of bits
   while (x) {
      steps += x & 1;
      x >>= 1;
   }
   return steps;
}
int main(){
   int x = 7;
   cout<<"The maximum number of steps to transform 0 to "<<x<<" with bitwise AND are "<<maxtransformation(x);
   return 0;
}

输出

The maximum number of steps to transform 0 to 7 with bitwise AND are 3

更新于:2020年6月3日

97 次浏览

开启您的 职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.