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

leetcode:数字转换为十六进制数(详解)

前言:内容包括:题目,代码实现,大致思路,代码解读

题目:

给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。

注意:

十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。 
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
示例 1:

输入:
26

输出:
"1a"
示例 2:

输入:
-1

输出:
"ffffffff"

代码实现:

char * toHex(int num)
{char arr[] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' };char* ret = malloc(9* sizeof(char));ret[8] = '\0';int index = 7;int count = 8;do{ret[index--] = arr[num & 0xf];count -= 1;num >>= 4;} while (num && count);return ret + index + 1;
}

大致思路:

将num的32个比特位每4位一转换(四个比特位=一个十六进制的数字):

1 一个arr数组存储16进制的所有数值:0~9 a~f

由于题目返回的是字符串类型,所以arr数组的每个元素都是字符,即'0'~'9'     'a'~'f'

2 num&0xf即可得到最低的四个比特位,0xf表示16进制的f

&:有0则0,双1则1

  比如num是26(这里只显示从后往前的后8个比特位)

26的二进制位:0001 1010

0xf的二进制位:  0000 1111

26&0xf:           0000 1010   ->26的最后四个比特位

3 num的每四个比特位转换完成后,需要右移4位,效果是去掉这四个已经转换完成的比特位

   但是:右移分为算术右移,和逻辑右移

leetcode上是算术右移,即正数右移时,右边抛弃,左边补0

                                          负数右移时,右边抛弃,左边补1

4 什么时候是num的全部比特位转换完毕?

num为正数:当num为0时转换完毕(因为num转换完一组四个比特位,就会右移4个比特位,右移的同时左边会补0,当正数的num转换完毕后,它的32个比特位全是0)

num为负数:设置count来统计num的转换次数,当count由初始的8变成0时,代表转换完毕

(因为负数的num每转换完一组四个比特位,也需要右移这4个比特位,右移的同时左边会补1,所以负数的num转换完毕的判断条件不能用num是否变成0,我们知道32为比特位,四个为一组,可以分为8组,那么count初始值设置为8,表示现在有8组待转换,每转换完一组,count--,当8组全部转换完成后,count==0)

代码解读:

part 1

	char* ret = malloc(9* sizeof(char));ret[8] = '\0';//手动在最后一个空间加上字符串的结束标志'\0'int index = 7;//正式存放转换好的元素的起始空间int count = 8;//当num为负数时,根据count的变化判断其是否转换完成

 1  malloc动态开辟一块空间,用于存放由数字num转成十六进制的字符串形式

    32个比特位,每四个为一组,可以分为8组(四个比特位对应一个十六进制数)

    故而一个num最多可以转成8个字符(一个字符是一个十六进制数字的字符形式)

    再加上字符串末尾的'\0',共需8+1=9的空间

2  转换是从32个比特位的末尾开始转换的,所以我们需要倒着存放

part 2

    do{ret[index--] = arr[num & 0xf];//对num后四个比特位进行十六进制的转换count -= 1;//一组转换完成num >>= 4;//去掉已经转换完成的一组四个比特位} while (num && count);return ret + index + 1;//返回第一个元素的地址

 1  需要使用do-while循环,而不使用while循环,原因在于:

while的结束条件是:num&&count,前一个用于判断num为正数时,转换是否结束

                                                          后一个用于判断num为负数时,转换是否结束

num为真:正数的num还未转换完成

count为真:负数的num还未转换完成

但是当num为0时,若只是使用while循环,则num不会进入循环,也就不会对为0的num进行十六进制的转换

所以使用do-while循环,直接执行一次转换,这样当num为0时,也能发生十六进制的转换

2   ret + index + 1

num最多能转换成8个六进制的字符

这意味着,num存在这样情况:全部转换完成后,没有将空间填满

比如当num为26时,转换成:1a,只占了两个空间

由于我们是倒着存放的(因为转换是从32个比特位的后四位向前转换的),且index--是后置--

所以当转换完成后,index+1,就是第一个元素的下标,ret+index+1,就是第一个元素的地址

相关文章:

leetcode:数字转换为十六进制数(详解)

前言:内容包括:题目,代码实现,大致思路,代码解读 题目: 给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字…...

Android 10 设置人脸解锁时,锁屏显示人脸解锁图标

Android 10设置人脸解锁时,锁屏解锁图标不会显示人脸图标,若想显示人脸图标,可参考以下两点进行修改: 1.此处引用人脸图标资源,请参考如下修改: diff --git a/packages/SystemUI/src/com/android/systemui/…...

【嵌入式环境下linux内核及驱动学习笔记-(5-驱动的并发控制机制)】

目录 1、上下文和并发1.1 上下文1.2 共享与临界内核中并发控制机制分为以下几类:并发控制机制的使用场景: 2、 并发控制机制--中断屏蔽3、并发控制机制--原子变量3.1 相关函数原子量类型a.设置原子量的值b.获取原子量的值c.原子变量加减d.原子变量自增自…...

必学宝典 黑马《最新JavaWeb开发教程》上线

对于程序员,所在的行业更迭实属过快,如果是为了找一份好工作,学技术前一定要先了解技术在市场中的需求情况。不然等你学完之后,才发现自己学了已被淘汰、过时的技术,白白浪费了宝贵的学习时间,后悔都来不及…...

【社区图书馆】学习如何读书

人类社会只有发明了发明的方法之后才能发展。同样道理,你们只有学习了学习的方法之后才能进步。 ——查理芒格 进了开发的门,从一开始就在查文档、百度搜 bug 解决的文章、买书,读书。买了很多很厚的工具书,然后拿来垫桌子。再然后…...

CO02工单组件,新增/删除/修改

REPORT zpp153. 事务代码: ZPP153-整散车生产订单自动调整程序名称:ZPP153-整散车生产订单自动调整程序目的:ZPP153-整散车生产订单自动调整开发人员: *(修改日志)--------------------------------------------------------日志号…...

MIT6.824 lab3AB记录

实验目标:基于raft日志复制算法实现的线性一致性kv存储引擎。 线性一致性: 所有的读操作都能够读取到最近一次写操作的结果。所有节点(或者进程)在同一时刻,看到的数据都是相同的。 简而言之,线性一致性…...

一分钟了解美国棒球体系·棒球1号位

美国棒球体系是一个庞大且复杂的体系,涵盖了从青少年到职业的各个层次。下面是美国棒球体系的主要组成部分: 1. 青少年棒球(Youth Baseball) 美国的青少年棒球体系包括各种地区和全国性的联盟,如Little League、Pony…...

通过ObjectMapper和JsonNode 把JSON字符串转换成树结构数据和获取树节点数据

一.简介 今天同事有个需求&#xff0c;要把一个JSON字符串转换成一个树结构的数据并获取节点数据&#xff0c;鉴于自己不想写递归去转换&#xff0c;于是使用ObjectMapper和JsonNode类去实现。 二.依赖 pom文件引入依赖&#xff1a; <dependency><groupId>com.…...

鉴源论坛 · 观模丨面向界面的图形化测试技术

作者 | 熊一衡 华东师范大学软件工程学院博士 苏亭 华东师范大学软件工程学院教授 版块 | 鉴源论坛 观模 01 什么是面向界面的图形化测试&#xff08;GUI Testing&#xff09; 图形用户界面(GUI) 是一种通过图形化方式呈现信息、数据、功能和操作的用户界面&#xff0c;旨在…...

Midjourney以图生图的详细教程(含6种案例介绍)

&#x1f3c6; 文章目标&#xff1a;学习并介绍Midjourney以图生图的详细教程 &#x1f340; Midjourney以图生图的详细教程 ✅ 创作者&#xff1a;熊猫Jay &#x1f389; 个人主页&#xff1a;Jay的个人主页 &#x1f341; 展望&#xff1a;若本篇讲解内容帮助到您&#xff0c…...

基于单片机的电路特性测试仪的设计

摘 要 当今社会科技的飞速发展&#xff0c;智能和便捷已经成为人们的日常诉求。现在放大电路在使用过程中经常出现故障&#xff0c;并且需要测试电路数据&#xff0c;但是大多数是手动进行测试&#xff0c;一定程度上影响了工作效率。 为了测量数据更安全更便捷&#xff0c;针…...

五一将迎2亿人次出行,君子签助力旅行社合规高效签旅游电子合同

近日&#xff0c;为规范旅游市场秩序&#xff0c;促进旅行社高质量发展&#xff0c;文旅部发布了《文化和旅游部办公厅关于进一步规范旅游市场秩序的通知》&#xff08;下称《通知》&#xff09;&#xff0c;对旅游业提出了新的要求。 《通知》中规范了旅行社经营行为。旅行社要…...

IAP升级遇到的问题

文章目录 1. app程序在SystemClock_Config中跑飞2. 程序HAL_Delay中卡死3. 通过外部flash模拟的U盘没能被电脑识别4. 将bin文件拷贝到片内flash中失败5、APP程序跳转过后串口不能工作 这几天在STM32G473使用IAP升级的时候踩了不少坑 1. app程序在SystemClock_Config中跑飞 boo…...

简单聊聊k8s,和docker之间的关系

前言 随着云原生和微服务架构的快速发展&#xff0c;Kubernetes和Docker已经成为了两个重要的技术。但是有小伙伴通常对这两个技术的关系产生疑惑&#xff1a; 既然有了docker&#xff0c;为什么又出来一个k8s&#xff1f; 它俩之间是竞品的关系吗&#xff1f; 傻傻分不清。…...

半小时学会HTML5

一、了解几个概念 1、HTML定义 HTML是&#xff08;Hyper Text Markup Language&#xff09;超文本标记语言&#xff0c;超文本包含&#xff1a;文字、图片、音频、视频、动画等。 2、W3C 是什么&#xff1f; W3C 即&#xff08;World Wide Web Consortium&#xff09; 万维…...

研报精选230421

目录 【行业230421南京证券】氢能行业&#xff1a;地缘政治加速绿色能源转型 【行业230421华安证券】AIGC行业研究框架与投资逻辑 【行业230421信达证券】工控行业深度报告&#xff1a;行业拐点将至&#xff0c;国产品牌加速崛起 【个股230421国信证券_华阳集团】聚焦汽车智能化…...

AI绘图风格对照表/画风样稿详细研究记录及经验总结(分析Midjourney和Stable Diffusion风格提示词实际使用情况)不断更新中...

Midjourney和Stable Diffusion都可以通过输入文本生成出令人惊叹的AI图像。 Midjourney是一个收费的在线服务&#xff0c;通过discord对话的形式来生图&#xff0c;局限性较大&#xff0c;但由于后台官方模型做得好&#xff0c;因此出图效果非常完美&#xff1b; Stable Diffus…...

人工智能论文的风格特点

搞清楚AI领域论文的风格特点是写出一篇高质量AI论文的前提&#xff0c;AI领域的论文有如下显著特点。 1. 论文的架构非常清晰且富有逻辑。一篇高质量的AI论文&#xff0c;读者通过大致扫一眼论文的各级标题就能够对论文的写作思路形成清晰的认识&#xff0c;明白论文各部分之间…...

成功上岸国防科大!

Datawhale干货 作者&#xff1a;王洲烽&#xff0c;太原理工大学&#xff0c;Datawhale成员 写在前面 相比较于一般的经验贴&#xff0c;我更想在这里讲述一下自己的故事。我一开始报考的是北理工&#xff0c;但很遗憾9月份北理改考408了&#xff0c;无缘京爷&#xff0c;所以…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...