第1张

法1:

 知识点:

1<
Scanner sc =new Scanner(System.in);
int N=sc.nextInt();
/*创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,输入的内容传给Scanner

next() 只读取到空格之前的数据
[读取完后把光标放在读取数据的同一行,该数据的后面]

nextInt()只能读取整数类型
[光标放在读取数据的同一行,该数据的后面]

nextLine()读取整行的数据包括单词间的空格,到回车结束(也就是从开始读一整行包括回车)
[光标放在下一行开头]*/

System.out.println(Integer.toString(N, 2));
//Integer.toString(int par1,int par2):par1表示 转成字符串的数字,par2表示 转成的进制表示
//Integer.toString(22,2):表示把22转成2进制表示的字符串,
int count =0;
//count来计数,比对每一位

for(int i=0;i<32;i++)
{
	if((N&(1<

法2:

将N和1进行按位与运算,可以得出最低位

结果为1,最低位为1;

结果为0,最低位为0,然后循环将N右移一位进行运算。

int count =0;
for(int i=0;i<32;i++)
{
	if((N&1)!=0){count++;}
		N=N>>>1; //“>>>”表示无符号右移
}

法3:

思想:开始消除1,消除1的个数就是1的个数

最后一个1会往回借,而后面的0会全变成1   :8(1000) 减一得7(0111)

原数10100
原数-110011
原数&(原数-1)10000

 (x-1)&x 的效果就是 消去最低位的1

count =0;
while(N!=0)
{
	N=((N-1)&N);
	count++;
}
System.out.println(count);

完整代码:

法1:

import java.util.Scanner;
public class a {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		int N=sc.nextInt();
		System.out.println(Integer.toString(N, 2));
		int count =0;
		for(int i=0;i<32;i++)
		{
			if((N&(1<

法2:

import java.util.Scanner;
public class a {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		int N=sc.nextInt();
		System.out.println(Integer.toString(N, 2));
		int count =0;
		for(int i=0;i<32;i++)
		{
			if((N&1)!=0){count++;}
				N=N>>>1; //“>>>”表示无符号右移
		}
		System.out.println(count);
	}
}

法3:

import java.util.Scanner;
public class a {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		int N=sc.nextInt();
		System.out.println(Integer.toString(N, 2));

		int count =0;
		while(N!=0)
		{
			N=((N-1)&N);
			count++;
		}
		System.out.println(count);
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/877899.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)