写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
输入例子:
0xA
输出例子:
10
最开始的解法:
import java.util.Scanner;
/** * Created by user on 2017/4/18. */
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String s = new String(sc.nextLine()); //16进制输入为字符串输入
int num = 0;
for (int i = 2; i < s.length(); i++) { //i=2,用来跳过“0x”
if (s.charAt(i) == 'A') {
num = num * 16 + 10; //16进制转化,num*16,ABCDEF分别代表10,11,12,13,14,15;
} else if (s.charAt(i) == 'B') {
num = num * 16 + 11;
} else if (s.charAt(i) == 'C') {
num = num * 16 + 12;
} else if (s.charAt(i) == 'D') {
num = num * 16 + 13;
} else if (s.charAt(i) == 'E') {
num = num * 16 + 14;
} else if (s.charAt(i) == 'F') {
num = num * 16 + 15;
} else {
num = num * 16 + Integer.parseInt(String.valueOf(s.charAt(i)));
//把(char)s[i]化为(int) s[i]
}
}
System.out.println(num); //输出转化后的num
}
}
}
但是未免太麻烦,百度到了:
http://blog.sina.com.cn/s/blog_74b644010102wias.html
import java.util.Scanner;
/** * Created by user on 2017/4/18. */
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String s=sc.nextLine();
int i=Integer.parseInt(s.substring(2),16);
//substring(2)跳过前2个,Interger.parseInt(string s,进制 t);
System.out.println(i);
}
}
}
这个,简短,牛掰。
Integer.parseInt(string str,radix 16);
不写进制的话,默认进制为10;
当然,有可能题意会变形,所以我又找了一个解法1的升级版,更加通用:
import java.util.Scanner;
/** * Created by user on 2017/4/18. */
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String s = new String(sc.nextLine());
//16进制输入为字符串输入
int num=0;
for(int i=2; i= 'A' && s.charAt(i) <= 'F') {
num = num * 16 + s.charAt(i) - 'A' + 10;
}else {
num = num * 16 + +s.charAt(i) - '0';
}
}
System.out.println(num);
}
}
}
刚开始是想这么写,后来脑子一抽,就写成了解法1,浪费时间。。。。
总结一下:
在java中,有字符串(某一进制数)转某一确定进制数,
Integer.parseInteger(String str, radix num);
如果是 num = Integer.parseinteger(1010)
那么num=1010,因为无radix时默认为10进制;