求內存中正整數在內存中存儲時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中的大小範圍就好。
總計:
很明顯本題第二種方法更好一下。其他的在大數情況下容易出錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章