当前位置: 首页 > news >正文

Java试题:进制转换

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

这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你参加为期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` 是因为我们在处理十六进制数。
 

相关文章:

  • 分布式锁实现(数据库+Redis+Zookeeper)
  • redis中的Lua脚本,redis的事务机制
  • 深度学习技术文章质量提升指南(基于CSDN评分算法优化)
  • http代理IP怎么实现?如何解决代理IP访问不了问题?
  • 【nextJs】官网demo学习
  • REACT--组件通信
  • 长短期记忆网络:从理论到创新应用的深度剖析
  • 链表-基础训练(二)链表 day14
  • HAProxy介绍与编译安装
  • 宝塔扩容——阿里云如何操作
  • ‌最新版DeepSeek保姆级安装教程:本地部署+避坑指南
  • 动态规划01背包问题系列一>01背包
  • Spring Boot 如何保证接口安全
  • 请说明C#中的List是如何扩容的?
  • 10.Docker 仓库管理
  • 《Keras 2 :使用 RetinaNet 进行对象检测》:此文为AI自动翻译
  • 运维基线方案说明
  • AI学习指南HuggingFace篇-Hugging Face 的核心工具
  • windows11那些事
  • 计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+LW文档+PPT+讲解)
  • 泰特现代美术馆25年:那些瞬间,让艺术面向所有人
  • 告别户口本!今天起婚姻登记实现全国通办
  • 远离军事前线的另一面暗斗:除了“断水”,印度还试图牵制对巴国际援助
  • 公示!17个新职业、42个新工种亮相
  • “三德子”赵亮直播间卖“德子土鸡”,外包装商标实为“德子土”
  • 首批18位!苏联籍抗日航空英烈信息更新