题解 | #进制转换#
进制转换
http://www.nowcoder.com/practice/8f3df50d2b9043208c5eed283d1d4da6
/* 以下三个点: ----------------------------------------- ①、16进制的表示 0x(0x是固定写法)数字或者字母(A-F)可以是小写,英文字母A,B,C,D,E,F分别表示数字10~15。 冯16进1, 例如:0xAF=175 的十进制如下: 相当于 10*16¹ + 15*16º = 160 +15 =175 ----------------------------------------- ②、字符减'0'可以到相应的整数,在ASCII表中对应的数值换算运算。 ----------------------------------------- ③、Math.pow(a,b) , 含义是a的b次方 */ //解法一: import java.util.*; public class Main{ public static void main(String[] args){ Scanner scan=new Scanner(System.in); while(scan.hasNext()){ String str = scan.nextLine(); int count = 0; //由于前面两位是'0x',故从第三位开始 str = str.substring(2,str.length()); //遍历得到的除了0x之外的字符串的部分 for(int i =0; i<str.length();i++){ int number = 0; if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){ //转成相应的数值 number = str.charAt(i) - '0'; //字母'A'/'a'~'F''f'对应数字10~15 }else if (str.charAt(i)>= 'a' && str.charAt(i) <= 'f'){ number = str.charAt(i) - 'a' + 10; }else if (str.charAt(i)>= 'A' && str.charAt(i) <= 'F'){ number = str.charAt(i) - 'A' + 10; } count += number * Math.pow(16,str.length()-1-i); } System.out.println(count); } } } //解法二: 直接用Integer.parseInt("String", 进制) 进行转换。 // import java.util.*; // public class Main{ // public static void main(String[] args){ // Scanner scan=new Scanner(System.in); // while(scan.hasNext()){ // String str=scan.next(); // System.out.println(Integer.parseInt(str.replaceAll("x",""),16)); // } // } // }