问题描述
从键盘输入一个不超过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));}}
评测结果如下: