题目:
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
题解
在Java中,各个整数类型byte、short、int、long,其中int占用的存储空间为4字节,也就是32bit。表示的范围是:-2^31到(2 ^31)-1。
然而,本道题中,输入的正16进制数的最大值为FFFF FFFF,即8字节,64bit,对应的值为:2^63。超出了int型数的表示 范围。
在解这道题的过程中,有两个实现方式:
(1)利用基本的转换思想,16进制转换为10进制数,所得到的10进制数为:16进制数每一位上的字面量 * 该位上所代表的的单位大小。例如:EF,转换为10进制数的计算过程为:15 * 16^0 + 15 * 16^1= 255
具体的实现如下:
解题思路为:
/*
- 解题思路:
- 从16进制数的最低位开始进行计算
- 设置sum(计算对应的10进制,类型为long),value(代表该位上的单位----对应着16的多少次方)
- 其中,对输入的16进制数,按照string进行存储,利用charAt(),读取每一位上的16进制的字符,
- 对16进制数进行遍历时,可以采用switch-case语句:(或者if-else语句)
- 如果值>‘A’,则转化为 n - ‘A’ +10
- 如果值<‘A’,则转化为 n - ‘0’
*/
import java.util.Scanner;
public class Main {
public static void main(String