/* 程序问题注释开始
-
程序的版权和版本声明部分
-
Copyright © 2020,湖南工程职业技术学院信息工程学院学生
-
All rights reserved.
-
文件名称: 蓝桥杯赛题
-
作 者: 李 斌
-
完成日期: 2020 年 03月 21日
-
版 本 号: 004
-
对任务及求解方法的描述部分
-
问题描述:
请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
例: 9的二进制表示为1001,有2位是1 -
程序问题注释结束
方法一
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
//输入一个整数
System.out.println("请输入一个整数:");
int N=sc.nextInt();
//转二进制输出
System.out.println("转二进制为:");
System. out.println(Integer. toString(N,2));
int count=0;
for(int i=0;i<32;i++)
{
//判断i位是否为1
if((N&(1<<i))==(1<<i))
{
//计数
count++;
}
}
//输出
System. out.println("含有1的个数是:"+count);
}
}
方法二
import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
//输入一个整数
System.out.println("请输入一个整数:");
int N=sc.nextInt();
//转二进制输出
System.out.println("转二进制为:");
System. out.println(Integer. toString(N,2));
int count=0;
for(int i=0;i<32;i++)
{
//N移动变换
if(((N>>>i)&1)==1)
{
//计数
count++;
}
}
//输出
System. out.println(count);
}
}
方法三
import java.util.Scanner;
public class Main3 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
//输入一个整数
System.out.println("请输入一个整数:");
int N=sc.nextInt();
//转二进制输出
System.out.println("转二进制为:");
System. out.println(Integer. toString(N,2));
int count=0;
//N大于0继续做循环
while (N!=0)
{
//改变靠后一个1转0
N=((N-1)&N);
//计数
count++;
}
//输出
System. out. println(count);
}
}
运行结果: