严正声明:转载请注明出处!!!
题目描述: 小红拿到了一个16进制数,她想知道该数转为二进制以后有多少个1?
输入描述: 一个字符串,用来表示16进制数。一定是0x开头,从第三个字符开始,每个字符一定是’0’-‘9’或者’a’-‘f’,字符串的长度不超过20000。
输出描述: 该16进制转为二进制后1的个数。
示例1: 输入:
0x3f
输出:
6
说明:
该16进制的值是63,转化为二进制后有6个1
示例2: 输入:
0xeeeeedddddccccc11111
输出:
45
我是这样写的,欢迎其他有更好的方式的大佬补充……
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
String str = s.substring(2);
int[] countOne = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
char[] chars = str.toCharArray();
int count = 0;
for(int i = 0;i < chars.length;i++){
if(chars[i] >= 'a' && chars[i] <= 'f'){
count += countOne[chars[i] - 'a' + 10];
}else{
count += countOne[chars[i] - '0'];
}
}
System.out.println(count);
}
}
|