题解 | 二进制数1

二进制数1

https://www.nowcoder.com/practice/bc4c7936f5ed42cbb9131b6f39aa272b

方法一

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long x=in.nextLong();
        int sum=0;
        while(x>0){
            sum+=x%2;
            x=x/2;

        }
        System.out.println(sum);
    }
       
       
}

优化,使用位运行

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long x=in.nextLong();
        int sum=0;
        while(x>0){
            sum+=x&1;
            x=x>>1;

        }
        System.out.println(sum);
    }
       
       
}

方法二 Brian Kernighan 算法

import java.util.Scanner;
//Brian Kernighan 算法
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long x=in.nextLong();
        int sum=0;
        while(x>0){
            x&=x-1;//将x二进制表示中最右边的那个 1(即最低位的 1)置为 0
            sum++;

        }
        System.out.println(sum);
    }
       
       
}

方法三 使用API

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long x=in.nextLong();
       
        System.out.println(Long.bitCount(x));
    }
       
       
}

全部评论

相关推荐

03-16 12:39
燕山大学 Java
点赞 评论 收藏
分享
02-26 09:15
已编辑
蚌埠学院 golang
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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