Problem:
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.
For example, given the range [5, 7], you should return 4.
Analysis:
Solutions:
C++:
int rangeBitwiseAnd(int m, int n) {
if(m == n)
return m;
unsigned int m_temp = m;
unsigned int num_digits = 0;
while(m_temp != 0) {
++num_digits;
m_temp /= 2;
}
unsigned int new_number = 1;
for(int i = 0; i < num_digits; ++i)
new_number *= 2;
if(new_number <= n)
return 0;
unsigned int result = m;
for(unsigned int index = m + 1; index <= n; ++index)
result &= index;
return int(result);
}
Java
:
Python: