当前位置: 首页 > 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;所以…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...