C++ 中数字范围的按位与
c++server side programmingprogramming更新于 2024/9/1 7:39:00
假设我们有一个范围 [m, n],其中 0 <= m <= n <= 2147483647。我们必须找到此范围内所有数字的按位与,包括 0 和 1。因此,如果范围是 [5, 7],则结果为 4。
要解决这个问题,我们将遵循以下步骤 −
i := 0
当 m 不为 n 时,则
m := m/2, n := n / 2,将 i 增加 1
向左移动 i 次后返回 m。
示例(C++)
让我们看下面的实现,以便更好地理解 −
#include <bits/stdc++.h> using namespace std; class Solution { public: int rangeBitwiseAnd(int m, int n) { int i = 0; while(m != n){ m >>= 1; n >>= 1; i++; } return m << i; } }; main(){ Solution ob; cout << (ob.rangeBitwiseAnd(5,7)); }
输入
5 7
输出
4