java-------华为机试-----------进制转化
题目描述
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
输入例子:
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.htmlimport 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<s.length();i++){ //i=2,用来跳过“0x” if (s.charAt(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进制;