import java.util.*;
public class Main{
public static int toBinary(int num) {
List<Integer> outList = new ArrayList<>();
int count = 0;
while(num>0) {
int tempData = num%2;
outList.add(tempData);
if(outList.contains(tempData)&&tempData == 1) {
count++;
}
num /= 2;
}
return count;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int num = in.nextInt();
System.out.println(toBinary(num));
}
}
将十进制正整数数转为二进制数的方法是:除基取余法。
基:基底,相当于指数的基底,二进制为2,8进制为8。
除基取余法的基本原理是:
- 将十进制数不断去除以基底2;
- 得到一个商(num/2)和一个余数(num%2);
- 将余数存储起来,将商作为新的num继续去除以2。
- 这样最后商肯定为0,也就是num最后是0;
- 同时得到一个余数的序列。
- 将这个余数序列逆序输出就是十进制数对应的正确的二进制数。
这样看来,ArrayList具有较强的适用性,统计出现的次数可以使用contains方法,如果让输出这个二进制数,也可以使用ArrayList内部自带的index逆序输出。