题意整理。
- 输入一个十六进制的数值字符串。
- 将其转换为十进制数输出。
方法一(循环)
1.解题思路
- 遍历字符串的所有字符。
- 对于每一个字符,找到对应的数字大小,并乘以对应位的基数,加到结果变量。
图解展示:
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.复杂度分析
- 时间复杂度:需要遍历字符串中所有字符,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。
方法二(使用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.复杂度分析
- 时间复杂度:需要遍历字符串中所有字符,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。