PTA 7-25 一位的十六进制转换为十进制 (10 分) java

320 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

题目描述:
十六进制记数系统有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);
    }
}

image.png

大家可以看到,结果输入为正确,其实这道题目并不是很难,两种解题思路也都比较容易理解,但是当考试时,由于时间的问题,并且容易紧张,还是看哪种方法自己较为熟悉,就按那种方法来写,也快要期末了,祝看到这篇文章的宝贝们考试加油!!!