问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
求解
NO.1
思路:16进制转2进制(逐字符转换),2进制转10进制
提交代码如下:
import java.util.Scanner;
/**
* @author 作者 : Cactus
* @version 创建时间:2018-2-20 下午03:59:27
*/
public class Main {
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
String str = sc.next();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < str.length(); i++){
char c = str.charAt(i);
String s = Integer.toBinaryString(Integer.valueOf(String.valueOf(c), 16));
for(int j = s.length(); j < 4; j++){
s = "0"+s;
}
sb.append(s);
}
String result = Integer.valueOf(sb.toString(), 2).toString();
System.out.print(result);
}
}
评测结果如下:
NO.2
最后一个评测结果运行错误的原因,应该是所测值超出了integer的范围。
故需要改进。
import java.util.Scanner;
/**
* @author 作者 : Cactus
* @version 创建时间:2018-2-20 下午03:59:27
*/
public class Main {
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.print(Long.parseLong(str, 16));
}
}
评测结果如下: