首页 > 试题广场 >

二进制数1

[编程题]二进制数1
  • 热度指数:7946 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}给定一个非负整数 x,请计算 x 的二进制表示中数字 \texttt{1} 的数量。

\hspace{15pt}【名词解释】
\hspace{23pt}\bullet\, 二进制表示二进制表示 指将整数用基数 2 的形式书写,不含前导零;
\hspace{23pt}\bullet\, 位计数位计数 是指统计一个整数二进制表示中 \texttt{1} 的数量,也称为 \operatorname{popcount}

输入描述:
\hspace{15pt}在一行上输入一个整数 x\left(-2^{63} < x < 2^{63}\right),表示待统计的数值。


输出描述:
\hspace{15pt}在一行上输出一个整数,表示 x 的二进制表示中 \texttt{1} 的数量。
示例1

输入

3

输出

2

说明

3 的二进制表示为 \left(11\right)_2,其中包含两个 \texttt{1}
示例2

输入

65

输出

2

说明

65 的二进制表示为 \left(1000001\right)_2,其中包含两个 \texttt{1}
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        int ans = 0;
        while (n != 0){
            ans += (n & 1);
            n >>>= 1;
        }
        System.out.println(ans);
    }
}

发表于 2020-05-13 10:34:19 回复(0)
//把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。

import java.util.Scanner; 
 
public class Main{
    public static void main(String[] args){
    	Scanner sca = new Scanner(System.in);
    	long n = sca.nextLong();
    	int count = 0;
    	while(n!=0) {
    		count++;
    		n = n & (n-1);
    	}
    	System.out.println(count);
    }
}

发表于 2020-04-02 16:29:09 回复(0)
Java实现,已通过。用位运算(n-1)&n,直到运算结果为0,运算次数即“1”的个数。运行时间:58ms,占用内存:10952k。代码如下:
import java.util.*;  
public class Main {
      public static void main(String[] argus)
      {
          Scanner scanner=new Scanner(System.in);
          while(scanner.hasNextLong())
          {
              long number=scanner.nextLong();
              System.out.println(NumberOf1(number));  
          }
          
          
      }
        public static int NumberOf1(long n) {
int time=0;
while (true) {
     if(n==0) break;
    time++;
   n = (n - 1) & n;
   
}
            return time;
            
        }
    }



发表于 2019-12-23 13:39:28 回复(0)
import java.util.Scanner;

/**
 * @Author: Lee
 * @Date: 2019/8/8 23:42
 * @Description:
 */
public class Main {

	public static void main(String[] args) {
		new Main().process();
	}

	public void process() {
		Scanner input = new Scanner(System.in);
		long source = input.nextLong();
		ten2TwoProcess(source);
	}

	public void ten2TwoProcess(long source) {
		int num = 0;
		
		String string = Long.toBinaryString(source);
		char[] chars = string.toCharArray();
		for (int i = 0; i < chars.length; i++) {
			if (chars[i] == '1') {
				num++;
			}
		}
		System.out.println(num);

	}

}

编辑于 2019-08-08 23:53:21 回复(0)