題目描述
輸入一個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中的大小範圍就好。
總計:
很明顯本題第二種方法更好一下。其他的在大數情況下容易出錯。