解题思路 (只供参考,不是最优解 )
- 将输入的数据先转换成二进制数;
- 通过字符串截取将二进制数据存储到集合中;
- 将改集合通过Stream流转化成Map集合,key为数据本身,value为相同数据的和;
- 最后通过循环key和value来获取符合条件的数据;
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Scanner; import java.util.function.Function; import java.util.stream.Collectors; /** * @author Administrator */ public class Main { public static void main(String[] args) { List<Integer> integerList = new ArrayList<>(); Scanner scanner = new Scanner(System.in); int input = scanner.nextInt(); String binaryString = Integer.toBinaryString(input); for (int i = 0; i < binaryString.length(); i++) { integerList.add(Integer.parseInt(binaryString.substring(i, i + 1))); } Map<Integer, Long> map = integerList.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); map.forEach((k, v) -> { if (k == 1) { System.out.println(v); } }); } }