华为OD机试“HJ5 进制转换”Java编程解答

描述

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

数据范围:保证结果在 1≤n≤231−1

输入描述:

输入一个十六进制的数值字符串。

输出描述:

输出该数值的十进制字符串。不同组的测试用例用\n隔开。

示例1

输入:

复制代码
0xAA

复制输出:

复制代码
170

答案1

java 复制代码
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String input=in.nextLine();
        int num = 0;
        int j=0;
        for(int i=input.length()-1;i>1;i--){
            if((int)input.charAt(i)>=65)
                num+=((int)input.charAt(i)-55)*Math.pow(16,j++);
            else
                num+=((int)input.charAt(i)-48)*Math.pow(16,j++);
        }
       System.out.println(num);
    }
}

详解1

十六进制转换为十进制方法

  1. 将十六进制数的每个数字与对应的权重相乘。

    例如,对于十六进制数1A3F,分别将1A3F与权重相乘。

  2. 将这些乘积相加。

  3. 注意权重的变化。

从右到左,权重依次为16的0次方、16的1次方、16的2次方,以此类推。

本方法有点投机,是已知字符ASCII码而且需要传入的字母全是大写情况下的做法

Math.pow(x,n)函数

在 Java 中,要计算一个数的几次方,您可以使用 Math.pow() 函数。这个函数接受两个参数,第一个参数是底数,第二个参数是指数。它会返回底数的指数次幂的结果。

例如,要计算 xn 次方,可以使用以下方式:

java 复制代码
double result = Math.pow(x, n);

这将返回 xn 次方的结果。请注意,Math.pow() 返回一个 double 类型的结果,如果需要将其转换为整数,可以使用强制类型转换或者其他适当的方式进行处理。

答案2

java 复制代码
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String hexString = scanner.next();
            // 去除十六进制字符串的前缀(如果有)
            if (hexString.startsWith("0x") || hexString.startsWith("0X")) {
                hexString = hexString.substring(2);
            }
            // 将十六进制字符串转换为十进制数值
            int decimalValue = Integer.parseInt(hexString, 16);
            // 输出十进制数值
            System.out.println(decimalValue);
        }
        scanner.close();
    }
}

详解2

hexString.startsWith()函数用法

hexString.startsWith("0x") 是 Java 字符串的一个方法调用。它用于检查字符串 hexString 是否以指定的前缀 "0x" 开头。如果是,它将返回 true,否则返回 false

Integer.parseInt()函数用法

Integer.parseInt() 是 Java 中的一个静态方法,用于将字符串解析为整数类型。它的作用是将给定的字符串表示的数字转换为整数值。

这个方法有两种重载形式:

  1. parseInt(String s): 接受一个字符串参数,将其解析为十进制的整数。
  2. parseInt(String s, int radix): 接受两个参数,第一个参数是要解析的字符串,第二个参数是解析时使用的基数(进制)。可以指定 2 到 36 之间的值作为基数,表示解析时使用的进制,如 2 表示二进制,8 表示八进制,16 表示十六进制。

在我们的例子中,我们使用 parseInt(String s, int radix) 方法的第二种形式,将十六进制字符串转换为十进制整数。我们使用基数参数设置为 16,表示解析时使用十六进制。这样,十六进制字符串中的字符会被解析为对应的十进制数值。

相关推荐
Flittly8 小时前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
小兔崽子去哪了9 小时前
Java 生成二维码解决方案
java·后端
人活一口气13 小时前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
NE_STOP15 小时前
Vibe Coding -- 完整项目案例实操
java
荣码15 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
SimonKing15 小时前
Google第三方授权登录
java·后端·程序员
明月光81815 小时前
从一行 @Builder 说起:重新拾起 Java 的 Lombok、注解与 Builder 模式
java
考虑考虑1 天前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯1 天前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路1 天前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java