Java试题:进制转换

发布于:2025-02-23 ⋅ 阅读:(14) ⋅ 点赞:(0)

活动发起人@小虚竹 想对你说:

这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你参加为期14天的创作挑战赛!

提醒:在发布作品前,请将不需要的内容删除。

一、题目要求

请问十六进制数 2021ABCD 对应的十进制是多少?

二、代码展示

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = "2021ABCD"; // 可以改为从输入读取,例如:String str = scan.nextLine();
        long sum = 0;
        
        for(int i = str.length() - 1; i >= 0; i--){
            char c = str.charAt(i);
            int value;
            
            if(c >= '0' && c <= '9'){
                value = c - '0';
            }
            else if(c >= 'A' && c <= 'D'){
                value = c - 'A' + 10;
            }
            else{
                // 处理无效字符(可选)
                System.out.println("无效的十六进制字符: " + c);
                scan.close();
                return;
            }
            
            sum = sum * 16 + value;
        }
        
        System.out.println(sum);
        scan.close();
    }
}

    }
}

核心代码解释:

  1. 循环遍历:从字符串的最后一个字符开始,向前遍历每个字符。


   2. 获取字符:`char c = str.charAt(i);` 获取当前索引 `i` 的字符。


   3. 计算字符对应的数值:
     - 如果字符是 `'0'` 到 `'9'`,则 `value = c - '0';` 将字符转换为对应的整数值。
     - 如果字符是 `'A'` 到 `'D'`,则 `value = c - 'A' + 10;` 将字母转换为对应的十进制值(A=10, B=11, ..., D=13)。


   (1)字符 `c`:
       - `c` 是一个字符变量,通常是一个字母(如 `'A'`, `'B'`, ..., `'F'`)。
       - 在C语言中,字符实际上是以ASCII码存储的。例如:
       - `'A'` 的ASCII码是 `65`
       - `'B'` 的ASCII码是 `66`
  

  (2)表达式 `c - 'A'`:
          - 这部分计算的是字符 `c` 相对于 `'A'` 的偏移量。
          - 例如:
          - 如果 `c = 'A'`,那么 `c - 'A' = 65 - 65 = 0`
          - 如果 `c = 'B'`,那么 `c - 'A' = 66 - 65 = 1`
   
          - 这样,每个字母相对于 `'A'` 的偏移量对应其在字母表中的位置。

  (3)加上 `10`:
          - 由于在十六进制中,`'A'` 对应 `10`,`'B'` 对应 `11`,依此类推。
          - 因此,通过将偏移量加上 `10`,可以将 `'A'` 转换为 `10`,`'B'` 转换为 `11`,等等。
           - 例如:
              - `'A'` 的偏移量是 `0`,加上 `10` 后得到 `10`
              - `'B'` 的偏移量是 `1`,加上 `10` 后得到 `11`
   
     - 如果字符不在上述范围内,输出错误信息并终止程序。


   4. 累加到总和:`sum = sum * 16 + value;` 将当前位的值加入总和。这里使用 `16` 是因为我们在处理十六进制数。