Bitwise AND of Numbers Range Solutions in C++
Number 201
Difficulty Medium
Acceptance 39.4%
Link LeetCode
Other languages Go
Solutions
C++ solution by haoel/leetcode
// Source : https://leetcode.com/problems/bitwise-and-of-numbers-range/// Author : Hao Chen// Date : 2015-06-08#include <stdlib.h>#include <iostream>using namespace std;/*Idea:1) we know when a number add one, some of the right bit changes from 0 to 1 or from 1 to 02) if a bit is 0, then AND will cause this bit to 0 eventually.So, we can just simply check how many left bits are same for m and n.for example:5 is 1016 is 110when 5 adds 1, then the right two bits are changed. the result is 1006 is 1107 is 111when 6 adds 1, then the right one bit is changed. the result is 110.9 is 100110 is 101011 is 101112 is 1100Comparing from 9 to 12, we can see the first left bit is same, that's result.*/int rangeBitwiseAnd(int m, int n) {int mask = 0xffffffff;/* find out the same bits in left side*/while (mask != 0) {if ((m & mask) == (n & mask)) {break;}mask <<= 1;}return m & mask;}int main(int argc, char**argv) {int m=5, n=7;if (argc>2){m = atoi(argv[1]);n = atoi(argv[2]);}cout << "range( " << m << ", " << n << " ) = " << rangeBitwiseAnd(m, n) << endl;return 0;}