本文已参与「新人创作礼」活动,一起开启掘金创作之路
题目描述:
十六进制记数系统有16个数字:0到9,A到F。之母A、B、C、D、E和F分别对应十进制的数字10、11、12、13、14和15。现在完成程序,输入为十六进制的数字(一位),显示它对应的十进制数。
输入样例:
在这里给出一组输入。
例如:
A
结尾无空行
输出样例:
在这里给出相应的输出。例如:
10
结尾无空行
代码如下
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String strng=sc.nextLine();
Integer outInteger = Integer.parseInt(strng, 16);
System.out.println(outInteger);
}
}
哇,这种方法真的太妙了,可能是我Java学的不太好,看到这种方法就觉得好妙啊!!我本来想通过判断输入的字符来一个个进行转化,但那样时间效率会大大降低在,这种方法的话,就更适合考试啥的,写起来较为方便 这道题的解法是学长教的,还有比较常规的一种方法
代码如下
import java.util.Scanner;
public class T2796 {
public static void main(String[] args) {
Convert();
}
static void Convert(){
long sum = 0;
String str ;
Scanner sc = new Scanner(System.in);
str = sc.nextLine();
char[] chars = new char[str.length()];
int[] ints = new int[str.length()];
chars = str.toCharArray();
for (int i = 0;i<str.length();i++){
if (chars[i] >= 'A' && chars[i] <= 'F'){
ints[i] = 10 + (chars[i] - 'A');
}
else
ints[i] = Integer.parseInt(String.valueOf(chars[i]));
}
for (int i=0;i<ints.length;i++){
sum = sum + ints[i]*(long)(Math.pow(16,ints.length-1-i));
}
System.out.println(sum);
}
}
大家可以看到,结果输入为正确,其实这道题目并不是很难,两种解题思路也都比较容易理解,但是当考试时,由于时间的问题,并且容易紧张,还是看哪种方法自己较为熟悉,就按那种方法来写,也快要期末了,祝看到这篇文章的宝贝们考试加油!!!