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.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<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进制;




posted @ 2017-04-22 10:28  过道  阅读(252)  评论(0)    收藏  举报