华为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,表示解析时使用十六进制。这样,十六进制字符串中的字符会被解析为对应的十进制数值。

相关推荐
Seven973 分钟前
【设计模式】从智能音箱到软件设计:探索外观模式的实际应用案例
java·后端·设计模式
功德+n4 分钟前
Apache Log4j 2
java·开发语言·log4j·maven·apache
YGGP7 分钟前
【每日八股】Golang篇(三):关键字(下)
开发语言·后端·golang
Seven978 分钟前
【设计模式】如何通过桥接模式解决系统扩展难题?
java·后端·设计模式
CodeCraft Studio16 分钟前
PDF处理控件Aspose.PDF,如何实现企业级PDF处理
java·python·pdf
Seven9721 分钟前
【设计模式】告别继承噩梦:用装饰者模式简化代码结构
java·后端·设计模式
九丶黎27 分钟前
爬虫案例十一js逆向数位观察网
开发语言·javascript·爬虫
网络安全指导员36 分钟前
kali linux 漏洞扫描
linux·运维·开发语言·网络·安全·web安全
Run_Teenage1 小时前
C语言每日一练——day_3(快速上手C语言)
c语言·开发语言
caihuayuan51 小时前
「mysql」Mac mysql一路畅通式安装
java·大数据·spring boot·后端·课程设计