【蓝桥杯】二进制中1的个数(Java实现)


/* 程序问题注释开始

  • 程序的版权和版本声明部分

  • 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);
	}
}

运行结果:
运行结果

发布了46 篇原创文章 · 获赞 1 · 访问量 814

猜你喜欢

转载自blog.csdn.net/qq_46354133/article/details/105009745
今日推荐