在这个问题中,我们得到一个整数X。我们的任务是找到从0转换为X所需的步骤总数。
有效转换-从A到B进行一次转换时,将计入一个步骤。要进行转换的条件是A!= B且A&B = A(&是按位与)。因此,第一步是从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中没有设置位,这直接导致了最小转换。
正如我们在示例中看到的那样,对数字及其按位与进行二进制转换。
展示我们解决方案实施的程序-
//在C ++中查找通过位与将0转换为X的最大步骤
#include <bits/stdc++.h> using namespace std; int maxtransformation(int x){ int steps = 0; //计算位数 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