华为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;
    }
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-18 18:30
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-15 17:46
暑期就挂了,秋招还有机会吗
大聪明777:研发提前批,14号刚开的,官网上面的配图上有写。提前批没过的话,秋招还可以投,不过前面的笔试/面试记录会被保留,供秋招参考
26届校招投递进展
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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