欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

牛客网华为机试【求int型正整数在内存中存储时1的个数】

程序员文章站 2024-03-11 22:54:07
...

题目描述

输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。

输入描述:
输入一个整数(int类型)

输出描述:
这个数转换成2进制后,输出1的个数

示例
输入

5

输出

2

题目分析

其实就是计算一个数转换为2进制之后,其中的1的个数。
俩思路:
第一个,先将这个数转化为2进制,java中转化为二进制的方法是Integer.toBinaryString(),然后当做一个字符串去计算,使用toCharArray转化为一个数组,求数组中字符 1 出现的次数即可。

第二个,正儿八经的用数取运算。既然是二进制,那么
先让这个数模2,若有余数,说明有一个1,再对当前这个数进行更新,就是 num /= 2。如此循环,直到这个数变为0(不大于0)。就可以计算出来二进制时1的个数。

java 代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        while(input.hasNextInt()){
            int num = input.nextInt();

            int count = 0;
            while (num > 0){
                if(num == 1){
                    count++;
                    break;
                }

                if(num % 2 == 1){
                    count++;
                    num /= 2;
                } else {
                    num /=2;
                }
            }
            System.out.println(count);
        }
    }
}



结果

牛客网华为机试【求int型正整数在内存中存储时1的个数】

附加:字符串解法


import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        while(input.hasNextInt()){
            int num = input.nextInt();
            String binaryString = Integer.toBinaryString(num);

            int count = 0;
            for (int i = 0; i < binaryString.length(); i++) {
                if(binaryString.charAt(i) == '1'){
                    count++;
                }
            }

            System.out.println(count);
        }
    }
}

附加:字符串解法的结果

牛客网华为机试【求int型正整数在内存中存储时1的个数】

相关标签: 牛客网华为机试