使用位运算 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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP