LeetCode 201. Bitwise AND of Numbers Range

718 ワード

通過可能なコード:
class Solution 
{
public:
    int rangeBitwiseAnd(int m, int n) 
    {
        int ret = 0;
        for (int i = 0; m!=0 && n!=0 && i<31; n>>=1, m>>=1, i++)
        {
        	ret += ((m%2!=0)&&m==n? (1<<i): 0);
        }
        return ret;
    }
};

VS 2013でテストに成功し(n=1,m=1,出力1)、ネット上のテストに失敗した(n=1,m=1,プロンプト出力0)のコードを提出する:
class Solution 
{
public:
    int rangeBitwiseAnd(int m, int n) 
    {
		int ret = 0;
		for (int i = 0; i < 31; ++ i)
		{
			ret |= (((n-m)>(1<<(i+1)) || (n/(1<<i))%2==0 || (m/(1<<i))%2==0)? 0: (1<<i));
		}  
		return 0;     
    }
};