VIPKID:笔试题(数组中和为0的一对数的数量,十进制转二进制中1的个数)
1. 求数组中的和为0 的一对数的数量
注意,需要用到set
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); String[] s = sc.nextLine().split(","); int len = s.length; HashSet<Integer> set = new HashSet<>(); for (int i = 0; i < len; i++) { set.add(Integer.valueOf(s[i].trim())); } int[] newarray = new int[set.size()]; int index=0; for (Integer i:set) { newarray[index++]= i; } int sum = 0; for (int i = 0; i < newarray.length; i++) { for (int j = i+1; j < newarray.length; j++) { if(newarray[i]+newarray[j]==0){ sum++; } } } System.out.println(sum); } }
2. 十进制转二进制中1的个数
方法1,借用java已经实现的方法
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); int m = sc.nextInt(); int num = 0; String str = Integer.toBinaryString(m); for (int i = 0; i < str.length(); i++) { if(str.charAt(i)=='1'){ num++; } } System.out.println(num); } }
方法2,自己实现,注意,2的N次方的数需要加1
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); int m = sc.nextInt(); int num = 0; while(m!=0){ if(m==2){ num++; break; } if(m%2!=0){ num++; } m/=2; } System.out.println(num); } }