首页 > 试题广场 >

二进制中有多少个1

[编程题]二进制中有多少个1
  • 热度指数:6864 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
把一个 32-bit 整型转成二进制,其中包含多少个 1 ,比如 5 的二进制表达是 101 ,其中包含 2 个 1
 
数据范围:输入的数字满足

输入描述:
输入为整型(十进制),只需兼容32-bit即可,如5、32


输出描述:
输出为字符串,如“2”、“1”
示例1

输入

5

输出

2

说明

5的二进制是101,其中包含2个1 
示例2

输入

0

输出

0
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int digit = Integer.valueOf(sc.nextLine());
        
        int num = getNumOfOne(digit);
        System.out.println(num);
    }
    
    public static int getNumOfOne(int digit) {
        int num = 0;
        for (int i = 0; i < 32; i++) {
            //例:10011011
            // 每次右移一位,判断是否为1
            num += digit & 1;
            digit >>>= 1;
        }
        
        return num;
    }
}

发表于 2022-08-30 08:43:41 回复(0)
import java.util.Scanner;
public class Main {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int num = in.nextInt();
            /*
             * 将输入的数num与1做&运算,这样会取到num二进制的
             * 的最后一位(0或1),之后将num右移一位,与1做&运算后会取到num的第二位
             * 依次类推就能得出num每一位上的1
             *
             * eg:
             * 101 & 001 = 001 count == 0 + 1
             * 101 >>> 1 = 010
             * 010 & 001 = 000 count == 1 + 0
             * 010 >>> 1 = 001
             * 001 & 001 = 001 count == 1 + 1
             * 
             */
            int count = 0;
            while (num > 0) {
                count += num & 1;
                num = num >>> 1;
            }
            System.out.print(count);
        }
}


编辑于 2020-06-29 09:10:48 回复(0)
利用与n&1的结果至于的n末尾有关,无符号右移。
import java.util.Scanner;

/**
 * @Author: coderjjp
 * @Date: 2020-05-10 9:45
 * @Description: 二进制中有多少个1
 * @version: 1.0
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int ans = 0;
        while (n > 0){
            if ((n & 1) > 0)
                ans++;
            n >>>= 1;
        }
        System.out.println(ans);
    }
}


发表于 2020-05-10 09:51:48 回复(0)
public class Main{
    public static void main(String[] args){
        Scanner sn = new Scanner(System.in);
        int n = sn.nextInt();
        System.out.println(Integer.bitCount(n));
    }
}
发表于 2020-04-22 17:00:30 回复(0)
老老实实
import java.util.*;
public class Main{
    public static void main(String[]args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            int count=0;
            while(n!=0){
                count+=n&1;
                n=n>>>1;
            }
            System.out.println(count);
        }
        
    }
}

位运算
发表于 2020-03-07 16:52:36 回复(0)
import java.util.Scanner;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException{
        Scanner sc = new Scanner(System.in);
        String str = Integer.toBinaryString(sc.nextInt());
        int count = 0;
        for(int i = 0;i < str.length();i++){
            if(str.charAt(i) == '1'){
                count++;
            }
        }
        System.out.println(count);
    }
}
很笨的方法,用了toBinaryString方法,但很容易理解
编辑于 2020-03-05 19:11:21 回复(0)
  • 只会调用Integer.toBinaryString()方法,把十进制转成二进制。
import java.util.*;
public class Main
{
    public static void main(String [] args)
    {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextInt())
        {
            int a=sc.nextInt();
            String str=Integer.toBinaryString(a);
            int count=0;
            for(int i=0;i<str.length();i++)
            {
                if((""+str.charAt(i)).equals("1"))
                {
                    count++;
                }
            }
            System.out.println(count);
        }
    }

}
发表于 2020-02-16 12:29:52 回复(0)
Java解答:
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int sum = 0;
        while(n != 0){
            sum = sum + n%2;
            n = n / 2;
        }
        System.out.println(sum);
    }
}

发表于 2019-08-02 20:18:50 回复(0)