描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在 1≤n≤231−1
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1
输入:
0xAA
复制输出:
170
答案1
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
十六进制转换为十进制方法
将十六进制数的每个数字与对应的权重相乘。
例如,对于十六进制数1A3F
,分别将1
、A
、3
、F
与权重相乘。将这些乘积相加。
注意权重的变化。
从右到左,权重依次为16的0次方、16的1次方、16的2次方,以此类推。
本方法有点投机,是已知字符ASCII码而且需要传入的字母全是大写情况下的做法
Math.pow(x,n)函数
在 Java 中,要计算一个数的几次方,您可以使用
Math.pow()
函数。这个函数接受两个参数,第一个参数是底数,第二个参数是指数。它会返回底数的指数次幂的结果。例如,要计算
x
的n
次方,可以使用以下方式:double result = Math.pow(x, n);
这将返回
x
的n
次方的结果。请注意,Math.pow()
返回一个 double 类型的结果,如果需要将其转换为整数,可以使用强制类型转换或者其他适当的方式进行处理。
答案2
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 中的一个静态方法,用于将字符串解析为整数类型。它的作用是将给定的字符串表示的数字转换为整数值。这个方法有两种重载形式:
parseInt(String s)
: 接受一个字符串参数,将其解析为十进制的整数。parseInt(String s, int radix)
: 接受两个参数,第一个参数是要解析的字符串,第二个参数是解析时使用的基数(进制)。可以指定 2 到 36 之间的值作为基数,表示解析时使用的进制,如 2 表示二进制,8 表示八进制,16 表示十六进制。在我们的例子中,我们使用
parseInt(String s, int radix)
方法的第二种形式,将十六进制字符串转换为十进制整数。我们使用基数参数设置为 16,表示解析时使用十六进制。这样,十六进制字符串中的字符会被解析为对应的十进制数值。