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= '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进制;

 

 

 

你可能感兴趣的:(leetcode水题(自用))