在这个问题上,我们得到两个整数值a和b。我们的任务是找到a到b的按位和(&)范围。这意味着我们将必须找到a&a + 1&a + 2&…b-1&b的值。
让我们举个例子来了解这个问题,
输入− a = 3,b = 8
输出-0
解释- 3&4&5&6&7&8 = 0
为了解决该问题,一个简单的解决方案是从a开始,然后通过将a增加到b,按位查找所有数。
更有效的解决方案,
这是一个更有效的解决方案,可以使用-
步骤1-翻转b的LSB。
步骤2-比较数字与a和b,检查它是否在范围内,
步骤2.1-如果该数字大于其翻转的LSB增益。
步骤2.2-如果不大于,则数字=结果。
现在,让我们看看上面的算法在工作中-
示例-a = 3和b = 8。
解决方案-
步骤1 -b = 8(1000),翻转最小号LSB。该数字变为0000,即0
步骤2-0小于3,结果为0。
现在,让我们看一下解决问题的代码,
#include <stdio.h> int main(){ long a, b; a = 3; b = 8; do{ b -= (b & -b); }while(a < b); printf("%li", b); }
输出结果
0