求内存中正整数在内存中存储时1的个数

题目描述
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数
示例:
输入5 输出2

方法一:
此方法比较蠢比较暴力,是自己原生思想。只为了解题通过很多细都没有在意。思路是将十进制转化二进制中,统计数组中1的个数。

import java.util.Scanner;
public class Main{
    public static void main(String[]args){
        Scanner in = new Scanner(System.in);
        int number = in.nextInt();
        int[] a = new int[100]; 
        int i=0;
        int count=0;
        while(number>=1) {
             a[i++] = number%2;
             //没有转成二进制数呢 数组还得逆序
             number =number/2;
        }
        for(int j =0;j<a.length;j++) {
            if(a[j] ==1) {
                count++;
            }
        }
        System.out.println(count);

    }
}

方法二:
巧妙使用&操作符:
①只对正数而言:

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int count = 0;
        while(n>0){
            if((n&1)>0){
                count++;
            }
            n=n>>1;
        }
        System.out.println(count);
    }
}

正负数均成立

public class Solution {
    public int NumberOf1(int n) {
        int count=0;
        while(n!=0){
            count++;
            n=n&(n-1);
        }
        return count;
    }
}

方法三:
方法三和方法一原理是一样的,只是对数的处理不同,方法三用了java里现成的方法操作的int 数。

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        String s = Integer.toBinaryString(num);
        num=0;
        for (int i = 0; i < s.length(); i++) {
            if(s.charAt(i)=='1'){
                num++;
            }
        }
        System.out.println(num);
    }
}

这里讲解一下Integer.toBinaryString方法。此方法将输入的数字转换成二进制数,但是转换输出的是String类型的字符串。
例如:String ss = Integer.toBinaryString(8);那么这里的ss就等于“1000”,注意它是一个字符串。
java中还有一个Integer.parseInt()方法。此方法将输入的数字字符组成的字符串转换成与其一致的数字。
例如: String s = “123456”;
int num = Integer.parseInt(s);
此处另外注意int 型数据在java中的大小范围就好。
总计:
很明显本题第二种方法更好一下。其他的在大数情况下容易出错。

猜你喜欢

转载自blog.csdn.net/cayman_2015/article/details/82494318