记录一个算法题(java代码):统计正整数n的二进制写法中有多少个1

编程入门 行业动态 更新时间:2024-10-05 21:17:32

记录一个算法题(java代码):统计正整数n的二进制写法<a href=https://www.elefans.com/category/jswz/34/1771373.html style=中有多少个1"/>

记录一个算法题(java代码):统计正整数n的二进制写法中有多少个1

package ludims.main;

import java.util.Scanner;

public class myMain {
    public static void main(String[] args) {
        System.out.println("统计正整数n的二进制写法中有多少个1"); //题干        
        Scanner in =new Scanner(System.in); //声明一个Scanner对象,接收键盘输入内容
        System.out.println("请输入一个整数:"); //提示输入数据
        while(in.hasNextLong()) {
            long num = in.nextLong();
            if(num >= 0) {
                System.out.println(num + "二进制写法中有 " + count1num(num) + "个1");  //输出计算结果
                System.out.println("请再输入一个整数:"); //提示输入数据
            }else {
                System.out.println("输入的不是正整数,请重新输入正整数:"); //提示输入了负数
            }
        }
        in.close(); //关闭Scanner
        System.out.println("输入格式不对,程序结束!"); //程序结束提示
    }
    
    /**
     * 统计正整数n的二进制写法中有多少个1
     * @param n
     * @return count
     * 使用算法:如n=9 (二进制写法1001) ,则n-1=8 (二进制写法1000),
     * 1001 & 1000 后结果为1000,即去掉了最右端的1,
     * 1000 再& 0111 结果为0000,如此统计循环的次数即可
     */
    static int count1num( long n) {
        int count;
        for(count = 0 ; n > 0; ++count) {  //每次将最后右端的1转换成0,循环统计1的个数
            n &= (n-1);  //位运算
        }
        return count;
    }
}
 

更多推荐

记录一个算法题(java代码):统计正整数n的二进制写法中有多少个1

本文发布于:2024-02-07 06:35:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1753788.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中有   写法   算法   多少个   代码

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!