华为OD机试真题 - 找数字

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        System.out.println(getM(num));
    }

    public static int getM(int num) {
        int ans = num;
        LinkedList<Integer> one = new LinkedList<>();
        LinkedList<Integer> zero = new LinkedList<>();
        for (int i = 1; i <= num << 1; i = i << 1) {
            if ((i &amp; num) == 0) {
                zero.add(i);
            }
            if ((i &amp; num) == i) {
                ans -= i;
                one.add(i);
            }
            if (one.size() > 0 &amp;&amp; (i &amp; num) == 0) {
                ans += i;
                break;
            }
        }
        for (int i = 1; i < 1 << one.size() - 1; i = i << 1) {
            ans += i;
        }
        return ans;
    }
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务