题解 | #进制转换#
进制转换
http://www.nowcoder.com/practice/8f3df50d2b9043208c5eed283d1d4da6
解决此算法的方式有多种
方法一、精简版
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String content = sc.next();
System.out.println(Integer.parseInt(content.substring(2), 16));
}
}
说明:优点: 此方法,使用了Integer封装的方法,简单易懂; 缺点:不适合我们理解进制之间转换的原理。
方法二、原理版
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
public class Main {
// 十六转二进制: 0xABC == C * 1 + B * 16 + A * 16 * 16
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String content = sc.next().toLowerCase().substring(2);
Map<Character, Integer> map = initMap();
int count = 0;
for(int i=content.length()-1; i >= 0; i--) {
int value = map.get(content.charAt(i));
// temp 表示当前 * 16 的次数
int temp = content.length() - 1 - i;
if(temp == 0) {
count += value;
continue;
}
int hexVal = 1;
while(--temp >= 0) {
hexVal *= 16;
}
count += value * hexVal;
}
System.out.println(count);
}
public static Map<Character, Integer> initMap() {
Map<Character, Integer> map = new HashMap<>();
map.put('0', 0);
map.put('1', 1);
map.put('2', 2);
map.put('3', 3);
map.put('4', 4);
map.put('5', 5);
map.put('6', 6);
map.put('7', 7);
map.put('8', 8);
map.put('9', 9);
map.put('a', 10);
map.put('b', 11);
map.put('c', 12);
map.put('d', 13);
map.put('e', 14);
map.put('f', 15);
return map;
}
}
说明: