【Python3】【力扣题】405. 数字转换为十六进制数

news2024/11/24 8:43:02
【力扣题】题目描述:

题意理解:(不允许使用库函数)

数字等于0,则结果为0,

数字小于0,则补码运算,即最高位(32位)为1,其余全部取反,再加1。相当于2的32次方+负数。

数字大于0,则计算十六进制(解题思路里详细说明)。

注:十六进制:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f。

(在ASCII码,a对应97)

【Python3】代码:

1、解题思路:基于“题意理解”,数字大于0,求与16的余数,小于10则直接字符串,大于等于10,转为小写字母。与16的商继续求余数,直到数字为0。

知识点:num % 16:求与16的余数,即num除以16的余数。

               str(...):转为字符串。

               chr(...):将整数转为ASCII中对应字符。

               [ ]:空列表。列表:有序、元素可重复、可变的序列。

               列表.append(...):往列表末尾中添加元素。

               列表.reverse( ):列表倒置,即列表起始元素在末尾,末尾元素在起始位置。

               "间隔符".join(列表):将列表转为字符串。间隔符可以为空。

class Solution:
    def toHex(self, num: int) -> str:
        if num == 0: return "0"
        # 负数:(补码运算)最高位为1,其余全部取反再加1
        # (32位)相当于:2的32次方-负数的绝对值,即2的32次方+负数
        if num < 0: num += 2 ** 32
        res = []
        while num != 0:
            # 依次求余数
            m = num % 16
            # 余数小于10则直接转为字符串
            if m < 10: astr = str(m)
            # 余数大于等于10,则转为对应小写字母,(97对应小写字母a)
            else: astr = chr(m - 10 + 97)
            res.append(astr)
            # 求商,继续下一轮求余数
            num = num // 16
        # 结果列表倒置
        res.reverse()
        return ''.join(res)

2、解题思路:一个十六进制位对应4个二进制位。32位二进制,即8位十六进制,从高到低(从左到右),依次将数字右移4位的倍数与十六进制最大值f进行与运算,依次获得对应的十六进制位。

知识点:num >> n:num二进制右移n位。

              num & 15:num与15(即十六进制最大值f)进行二进制与运算。二进制位依次与运算,相同为1,其余为0。依次获得一位十六进制位。

class Solution:
    def toHex(self, num: int) -> str:
        if num == 0: return "0"
        res = []
        for i in range(7,-1,-1):
            # 二进制右移,与16进制最大值f求与运算,依次获取一个16进制位
            val = (num >> (4 * i)) & 15
            if len(res) > 0 or val > 0:
                # 小于10则转为字符串,大于等于10则转为对应字母
                astr = f"{val}" if val < 10 else f"{chr(val - 10 + 97)}"
                res.append(astr)
        return ''.join(res)

3、补充:使用库函数,不在本题解题范围之内(本题不允许使用库函数)

(3-1)解题思路:python中库函数format可以将整数转为十六进制。

知识点:1 << 32:1左移32位,相当于2的32次方即2 ** 32。

               format(...):字符串格式化。'Ox'是十六进制的开头标识。

class Solution:
    def toHex(self, num: int) -> str:
        # 小于0,补码运算
        if num < 0: num += (1 << 32)
        # 其余,使用format函数转换
        return format(num, '0x')

(3-2)解题思路:python中库函数hex可以将十进制转为十六进制。

知识点:hex(...):将十进制转为十六进制。返回结果中含开头标识'Ox'。

               序列[2:]:序列(字符串、列表等)中获取从下标2(含)到最后的元素。下标从0开始。

class Solution:
    def toHex(self, num: int) -> str:
        # 小于0,补码运算
        if num < 0: num += (1 << 32)
        # 其余,使用hex函数转换,去除开头标识'Ox'
        return hex(num)[2:]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2229061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

扫雷游戏(C语言详解)

扫雷游戏&#xff08;C语言详解&#xff09; 放在最前面的1、前言&#xff08;扫雷游戏的简介&#xff09;2、扫雷游戏的规则&#xff08;简易版&#xff09;3、代码实现&#xff08;3.1&#xff09;提醒一下&#xff1a;( i ) 提醒1&#xff1a;( ii ) 提醒2&#xff1a; &…

PointLIO利用unilidar复现

配置宇树激光雷达的时候出现程序报错问题 问题&#xff1a; 问题链接 原因&#xff1a;普通账户没有权限访问设备——也就是ubuntu 存在串口数据读取权限问题 ttyS0设备的用户主为root,所属的组为dialout 同时owner和group都是有相同的rw权限的&#xff0c;但others是没有任何…

Kafka 客户端工具使用分享【offsetexplorer】

前言&#xff1a; 前面我们使用 Spring Boot 继承 Kafka 完成了消息发送&#xff0c;有朋友会问 Kafka 有没有好用的客户端工具&#xff0c;RabbitMQ、RocketMQ 都有自己的管理端&#xff0c;那 Kafka 如何去查看发送出去的消息呢&#xff1f; 本篇我们就来分享一个好用的工具…

5G基础知识

那个工种&#xff1f; FDD 频分双工&#xff08;Frequency Division Duplexing&#xff09;&#xff0c;理解起来很简单&#xff0c;就是把上行和下行业务隔离在两个频段&#xff0c;互不干扰。 而 TDD 时分双工&#xff08;Time-Division Duplexing&#xff09;&#xff0c;是…

python读取视频并转换成gif图片

1. 安装三方库 moviepy 将视频转换成gif&#xff0c;需要使用 moviepy库 确保已经安装了moviepy库 pip install moviepy2. 代码实现&#xff1a; from moviepy.editor import VideoFileClipmyclip VideoFileClip("video.mp4") myclip2 myclip.subclip(0, 10).re…

Webserver(2.4)进程控制

目录 进程退出孤儿进程僵尸进程wait函数waitpid函数 进程退出 exit 刷新IO缓冲区 _exit 孤儿进程 父进程运行结束&#xff0c;但子进程还在运行&#xff0c;这样的子进程称为孤儿进程。 每当出现一个孤儿进程的时候&#xff0c;内核就把孤儿进程的父进程设置为init&#xff…

UART-通用异步收发器

1. UART的基本工作原理 UART通信主要有两个部分构成&#xff1a;发送器和接收器&#xff0c;也就是我们常见的&#xff08;RX接收&#xff0c;TX发送&#xff09;两个独立的线路来实现数据的双向传输&#xff0c;由于是异步的&#xff0c;UART并不需要时钟信号&#xff0c;而是…

linux 互斥锁

首先是概念 互斥锁是可以休眠的。 所以不能在中断中使用&#xff0c; 在中断中只能使用 自旋锁。 然后是 函数&#xff1a; 然后是 open 如果以 NONBLOCK 打开&#xff0c; 遇到 互斥锁怎么办&#xff1f; 总结一下&#xff1a; 1 open() 函数的 阻塞与不阻塞的标志&#…

第72期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

[ 应急响应靶场实战 ] VMware 搭建win server 2012应急响应靶机 攻击者获取服务器权限上传恶意病毒 防守方人员应急响应并溯源

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

Linux运维高手工具全集及功能分类:20+必备神器

文章目录 Linux运维高手工具全集及功能分类&#xff1a;20必备神器一、系统管理与配置1.1 Shell1.2 Ansible1.3 Puppet1.4 Chef 二、监控与告警2.1 Prometheus2.2 Grafana2.3 Zabbix2.4 Nagios2.5 ELK Stack&#xff08;Elasticsearch, Logstash, Kibana&#xff09; 三、容器与…

安卓APP开发中,如何使用加密芯片?

加密芯片是一种专门设计用于保护信息安全的硬件设备&#xff0c;它通过内置的加密算法对数据进行加密和解密&#xff0c;以防止敏感数据被窃取或篡改。如下图HD-RK3568-IOT工控板&#xff0c;搭载ATSHA204A加密芯片&#xff0c;常用于有安全防护要求的工商业场景&#xff0c;下…

什么是x86架构,什么是arm架构

什么是 x86 架构&#xff1f; x86 架构是一种经典的指令集架构&#xff08;ISA&#xff09;&#xff0c;最早由英特尔在 1978 年推出&#xff0c;主要用于 PC、服务器等领域。 它是一种复杂指令集计算&#xff08;CISC&#xff09;架构&#xff0c;支持大量的复杂指令和操作&…

知识分享 | SNP检测试剂盒开发注意事项及启衡星CDMO案例分享

一、SNP检测方法 常规有阵列的杂交、qPCR和测序等多种方法&#xff0c;其中基于qPCR方法的SNP检测试剂盒因具有快速、简便的优势&#xff0c;已有大量检测试剂盒上市。如&#xff1a;人CYP2C9和VKORC1基因检测试剂盒、人类SLCO1B1和ApoE基因分型检测试剂盒、人ADRB1&#xff0…

详解varint,zigzag编码, 以及在Go标准库中的实现

文章目录 为啥需要varint编码为啥需要zigzag编码varint编码解码 zigzag编码解码 局限性 为啥需要varint编码 当我们用定长数字类型int32来表示整数时&#xff0c;为了传输一个整数1&#xff0c;我们需要传输00000000 00000000 00000000 00000001 32 个 bits&#xff0c;而有价…

又一部神作登场,MTC高分8.8认证,堪称年度佳片

威尼斯电影节上&#xff0c;布拉迪科贝特导演的新作《粗野派》大放异彩。这部电影&#xff0c;不仅在现场收获了观众的真诚掌声&#xff0c;甚至被不少专业影评人评为“2024年度最佳电影”&#xff0c;而这个评价背后&#xff0c;是一部作品真正打动人心的力量。 布拉迪科贝特&…

低代码平台如何通过AI赋能,实现更智能的业务自动化?

引言 随着数字化转型的加速推进&#xff0c;企业在日常运营中面临的业务复杂性与日俱增。如何快速响应市场需求&#xff0c;优化流程&#xff0c;并降低开发成本&#xff0c;成为各行业共同关注的核心问题。低代码平台作为一种能够快速构建应用程序的工具&#xff0c;因其可视化…

进程、孤儿进程、僵尸进程、fork、wait简介

进程相关概念 程序和进程 程序&#xff1a;是指编译好的二进制文件&#xff0c;在磁盘上&#xff0c;占用磁盘空间, 是一个静态的概念. 进程&#xff1a;一个启动的程序&#xff0c; 进程占用的是系统资源&#xff0c;如&#xff1a;物理内存&#xff0c;CPU&#xff0c;终端等…

已解决:VS2022一直显示编译中但无法运行的情况

本问题已得到解决&#xff0c;请看以下小结&#xff1a; 关于《VS2022一直显示编译中但无法运行的情况》的解决方案 记录备注报错时间2024年报错版本VS2022报错复现突然VS2022不能启动&#xff0c;一直显示编译中&#xff0c;取消重试无效&#xff0c;重新生成解决方案无效报错…

12. MapReduce全局计数器

一. 计数器概述 在执行MapReduce程序时&#xff0c;控制台的输出中一般会包含如下内容。 这些输出就是MapReduce的全局计数器的输出信息。计数器是用来记录job的执行进度和状态的&#xff0c;它的作用可以理解为日志&#xff0c;方便用户了解任务的执行状况&#xff0c;辅助…