5.进制转换

文章讲述了如何使用Java编程语言将一个十六进制的数值字符串转换成十进制表示。提供了两种方法,一种利用Integer.parseInt的进制转换功能,另一种通过手动计算,涉及字符串反转和循环处理十六进制字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

输入描述:

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

输出描述:

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

示例1

输入:

0xAA

输出:

170

思路1:

这道题是16进制转10进制,字符串开始的0x是16进制的标识符,所以我们要先把它去掉,这里可以用subString;

后面的就是我们想要的16进制数据,现在要把这个String 转成 int,是不是很熟悉,Integer 的parseInt是可以指定进制的,所以这里我们用这个方法转一下就好了

解答1:

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) {
            String str = in.nextLine().substring(2);
            System.out.print(Integer.parseInt(str,16) + "/n");
        }
    }
}

思路2:

有些小伙伴可能对这些不是很熟悉,所以下面的解法使用最基础的方式.

最开始的步骤还是一样的,先把0x去掉,仍然使用subString,比如0xC1变成C1

接下来要开始转换了,首先,1是倒数第一位的,它代表的数字是1*16的0次方,C是倒数第二位,代表12*16的1次方.

但是1的索引是1,但是16的幂是0,C的索引是0,16的幂是1,索引和幂之间的关系可以用这个关系来表示:   最大索引-当前索引 = 当前幂.

但如果我们把字符串反转一下,C1变成1C,这样索引和幂的关系就变成了  当前索引=当前幂.

之后我们从第一位开始,逐步计算即可.

解答2:

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) {
            int num = 0;
            StringBuilder builder = new StringBuilder(in.nextLine().substring(2)).reverse();
            for (int i = 0; i < builder.length(); i++) {
                // 这里计算一下当前位置需要乘16的几次方
                int y = 1;
                for (int x = 0; x < i; x++) {
                    y = y * 16;
                }
                switch (builder.charAt(i)) {
                    case 'A':
                        num += (10 * y);
                        break;
                    case 'B':
                        num += (11 * y);
                        break;
                    case 'C':
                        num += (12 * y);
                        break;
                    case 'D':
                        num += (13 * y);
                        break;
                    case 'E':
                        num += (14 * y);
                        break;
                    case 'F':
                        num += (15 * y);
                        break;
                    default:
                        num += (Integer.valueOf(builder.charAt(i)+"") * y);
                        break;
                }
            }
            System.out.println(num + "\n");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值