(java实现)
题目描述:
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
输入描述:
输入一个十六进制的数值字符串。注意:一个用例会同时有多组输入数据,请参考帖子https://www.nowcoder.com/discuss/276 处理多组输入的问题。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1:
输入
0xA 0xAA
输出
10 170
问题分析:
思路一:直接调用Java的decode方法.
该方法的作用是将 String 解码为 Integer。接受十进制、十六进制和八进制数字。
根据要解码的 String(mn)的形式转成不同进制的数字。 mn由三部分组成:符号、基数说明符和字符序列。 -0X123中-是符号位,0X是基数说明符(0表示八进制,0x,0X,#表示十六进制,什么都不写则表示十进制),123是数字字符序列。
思路二:假设输入的是字符串。按照十六进制的字符串来处理。
相关知识:
Integer.decode();
参考代码:
思路一实现:
import java.util.*; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); while (input.hasNext()) { String str = input.nextLine(); System.out.println(Integer.decode(str)); } } }
思路二实现:
import java.util.*; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); while (input.hasNext()) { String str = input.nextLine(); str = str.substring(2); char[] ch = str.toCharArray(); int sum = 0; int tmp = 0; for (int i=ch.length-1; i>=0; i--) { if (ch[i]>='0' && ch[i]<='9') { tmp = ch[i]-'0'; sum = sum + (int)Math.pow(16,ch.length-i-1)*tmp; }else { tmp = ch[i]-'A'+10; sum = sum + (int)Math.pow(16,ch.length-i-1)*tmp; } } System.out.println(sum); } } }