题目:leetcode
Bitwise AND of Numbers Range
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.
参考:http://www.cnblogs.com/lailailai/p/4430972.html分析:
对[m,n]区间AND操作的最后一位进行分析:当n>m时,最后一位肯定有0存在,故与操作后是0.当m==n时,只有当m和n为奇数才是1,否则仍为0.按照这种思路计算最多32次,截止条件是m或n有一个成为0.
class Solution {
public:
int rangeBitwiseAnd(int m, int n) {
int res=0;
for(int i=0;i<32 && m!=0 && n!=0;i++)
{
res=res | (lastvalue(m,n)<<i);
m=m>>1;
n=n>>1;
}
return res;
}
int lastvalue(int m,int n)
{
if(m==n)
{
return m&1;
}
else
{
return 0;
}
}
};