[topcoder]BinaryCards

现在觉得有空时可以刷一下topcoder的DIV 2的Lvl 3的题目。感觉和刷LeetCode和WikiOi都是不一样的。

http://community.topcoder.com/stat?c=problem_statement&pm=11552&rd=14544

http://apps.topcoder.com/wiki/display/tc/SRM+519

这道题目是找规律,从6变到8的过程中有最大的15;而由35到38的过程中最大是39,主要是去掉32后,3->6的过程中有个4,所以变成32+7。所以算法就是找到最高的那个不同的位,然后把后面的都变成1就行了。

但实现的时候不熟练位操作,就参考了标程。可以看到判断某两个位是否一样可以用异或^,然后和1的shif比较。而最后把后面的位都变1则是和1的左移(就是2的幂)减一进行或做到的。

public class BinaryCards

{

    public long largestNumber(long A, long B)

    {

        if (A == B) return A;

        for (int i = 60; i >= 0; i--)

        {

            if (((A^B) & (1l<<i)) != 0)

                return A | ((1l<<(i+1))-1);

        }

        return A;

    }

}

  

你可能感兴趣的:(topcoder)