题目描述:
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
Java实现:
import java.util.*;
public class Main {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine();
int res = 0;
int j = 1;
for (int i = str.length()-1; i > 1; i--) {
char tmp = str.charAt(i);
int num = 0;
switch (tmp) {
case 'A' :
num = 10;
break;
case 'B' :
num = 11;
break;
case 'C' :
num = 12;
break;
case 'D' :
num = 13;
break;
case 'E' :
num = 14;
break;
case 'F' :
num = 15;
break;
default :
num = tmp - '0';
break;
}
res += num * j;
j *= 16;
}
System.out.println(res);
}
}
}
知识点:
- 将char数字变成int数字的方法是直接-‘0’
- 将字符串变成数字的方法:第一种方法:i=Integer.parseInt(s);//直接使用静态方法,不会产生多余的对象,但会抛出异常第二种方法:i=Integer.valueOf(s).intValue();//Integer.valueOf(s) 相当于 new Integer(Integer.parseInt(s)),也会抛异常,但会多产生一个对象
- 使用Integer类自带的方法Integer.parseInt(str,16)
- 也可以不用switch case ,记住‘A’的ascii码是65,‘0’是48
- 这道题还有一个地方没有考虑,就是大数情况下int可能会溢出,这时候就应该像题目说的一样输出十进制字符串而不是一个int数