此题出自牛客网的华为机试在线训练专题
题目描述
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
示例1
输入
0xA
输出
10
题解如下
方法一:使用Integer类中的方法实现
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String s = new String(sc.nextLine());
s = s.substring(2);
Integer i = Integer.parseInt(s,16);
System.out.println(i);
}
}
}
知识点:
public static int parseInt(String s, int radix) throws NumberFormatException
使用第二个参数指定的基数,将字符串参数解析为有符号的整数。除了第一个字符可以是用来表示负值的 ASCII 减号 '-'
('\u002D’
)外,字符串中的字符必须都是指定基数的数字(通过 Character.digit(char, int)
是否返回一个负值确定)。返回得到的整数值。
如果发生以下任意一种情况,则抛出一个 NumberFormatException
类型的异常:
- 第一个参数为
null
或一个长度为零的字符串。 - 基数小于
Character.MIN_RADIX
或者大于Character.MAX_RADIX
。 - 假如字符串的长度超过 1,那么除了第一个字符可以是减号
'-'
('u002D’
) 外,字符串中存在任意不是由指定基数的数字表示的字符。 - 字符串表示的值不是
int
类型的值。
示例:
parseInt("0", 10) 返回 0 parseInt("473", 10) 返回 473 parseInt("-0", 10) 返回 0 parseInt("-FF", 16) 返回 -255 parseInt("1100110", 2) 返回 102 parseInt("2147483647", 10) 返回 2147483647 parseInt("-2147483648", 10) 返回 -2147483648 parseInt("2147483648", 10) 抛出 NumberFormatException parseInt("99", 8) 抛出 NumberFormatException parseInt("Kona", 10) 抛出 NumberFormatException parseInt("Kona", 27) 返回 411787
参数:
s
- 包含要解析的整数表示形式的 String
radix
- 解析 s
时使用的基数。
返回:
使用指定基数的字符串参数表示的整数。
抛出:
NumberFormatException
- 如果 String
不包含可解析的 int
。
方法二:自己实现转换
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String s = new String(sc.nextLine());
s = s.substring(2);
char[] arr = s.toCharArray();
int count = 0;
int num=0;
int temp=0;
for(int i=arr.length-1;i>=0;i--){
if(arr[i]>='0'&&arr[i]<='9'){
temp = arr[i]-'0';
} else if(arr[i]>='a'&&arr[i]<='z'){
temp = arr[i]-'a'+10;
} else if(arr[i]>='A'&&arr[i]<='Z'){
temp = arr[i]-'A'+10;
} else {
break;
}
num += temp*Math.pow(16,count);
count++;
}
System.out.println(num);
}
}
}