题意整理。

  • 输入一个十六进制的数值字符串。
  • 将其转换为十进制数输出。

方法一(循环)

1.解题思路

  • 遍历字符串的所有字符。
  • 对于每一个字符,找到对应的数字大小,并乘以对应位的基数,加到结果变量。

图解展示: alt

2.代码实现

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String s=sc.nextLine();
            //记录位数对应基数
            int digit=1;
            //记录转换后的十进制数
            int res=0;
            for(int i=s.length()-1;i>=2;i--){
                char c=s.charAt(i);
                //'0'-'9'对应数字0-9
                if(c>='0'&&c<='9'){
                    res+=(c-'0')*digit;
                }
                //'A'-'F'对应数字10-15
                else if(c>='A'&&c<='F'){
                    res+=(c-'A'+10)*digit;
                }
                digit*=16;
            }
            System.out.println(res);
        }
    }
}

3.复杂度分析

  • 时间复杂度:需要遍历字符串中所有字符,所以时间复杂度为O(n)O(n)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)

方法二(使用IO流处理输入)

1.解题思路

思路和方法一相同,不过采用输入流处理输入的字符串。

2.代码实现

import java.io.*;

public class Main{
    public static void main(String[] args){
        //利用BufferedReader接受输入字符串
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        //记录输入字符串
        String s;
        try{
            while((s=br.readLine())!=null){
                //记录位数
                int digit=1;
                //记录转换后的十进制数
                int res=0;
                for(int i=s.length()-1;i>=2;i--){
                    char c=s.charAt(i);
                    //'0'-'9'对应数字0-9
                    if(c>='0'&&c<='9'){
                        res+=(c-'0')*digit;
                    }
                    //'A'-'F'对应数字10-15
                    else if(c>='A'&&c<='F'){
                        res+=(c-'A'+10)*digit;
                    }
                    digit*=16;
                }
                System.out.println(res);
            }
        }
        catch(IOException e){
            
        }
        
    }
}

3.复杂度分析

  • 时间复杂度:需要遍历字符串中所有字符,所以时间复杂度为O(n)O(n)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)