405. Convert a Number to Hexadecimal

2023-12-21 16:32
文章标签 number convert 405 hexadecimal

本文主要是介绍405. Convert a Number to Hexadecimal,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

405. 数字转换为十六进制数

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

注意:

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

示例 1:

输入: 26输出: "1a" 

示例 2:

输入: -1输出: "ffffffff" 

解法一

class Solution {
public:Solution() : table("0123456789abcdef") {}string toHex(int num) {string res = "";int first = (num & 0xf0000000) >> 28;//单独处理符号位res += table[first];//最高位int mask = 0x0f000000;int shift = 24;//移位数while (mask != 0) {int temp = (num & mask) >> shift;res += table[temp];shift -= 4;mask >>= 4;}int start = 0;while (start < res.length() - 1 && res[start] == '0') start++;return res.substr(start);}
private:string table;
};

解法二

class Solution {
public:string toHex(int num) {if(num == 0) return "0";string table = "0123456789abcdef";string res = "";while(num != 0 && res.size() != 8) {//两个条件缺一不可res = table[num & 0xf] + res;num >>= 4;}return res;}
};

解法一是我一开始写的。最开始需要对高4位先进行与运算(因为对负数0xf0000000右移是算术右移,得到的是0xff000000,而不是想要的0x0f000000),然后再从0x0f000000开始,向右依次扫描至最后。因为从高位到低位扫描,字符串里包含了‘0’,所以最后要找到第一个非'0'的字符,截断后输出。 解法二更加紧凑。为了不处理高位的情况,这种解法选择了对输入变量num进行右移(而不是移动mask),而始终对最低4位进行与操作。这样判断条件num != 0处理了高位多余的‘0’,又判断了右移的边界(对正数右移8次之后就会得到0;对于有前导0的正数,又刚好会在合适的地方停止循环),至于负数,循环地右移(是算术右移)最后会得到-1(而不是0),显然不能以-1为判断条件(因为输入的num可能就是-1),所以我们以字符串res的长度8为界限,当字符串长度为8时,说明已经右移32位了,这时候要停下来。

2019/05/04 00:48

这篇关于405. Convert a Number to Hexadecimal的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/520709

相关文章

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

【Hdu】Minimum Inversion Number(逆序,线段树)

利用线段树在nlogn的时间复杂度内求一段数的逆序。 由于给的序列是由0 ~ n -1组成的,求出初始的逆序之后可以递推出移动之后的逆序数。 #include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const in

【JavaScript】基本数据类型与引用数据类型区别(及为什么String、Boolean、Number基本数据类型会有属性和方法?)

基本数据类型   JavaScript基本数据类型包括:undefined、null、number、boolean、string。基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值。 1)基本数据类型的值是不可变的 任何方法都无法改变一个基本类型的值,比如一个字符串: var name = "change";name.substr();//hangconsole.log

ORA-24067: exceeded maximum number of subscribers for queue ADMIN.SMS_MT_QUEUE

临时处理办法: delete from aq$_ss_MT_tab_D;delete from aq$_ss_MT_tab_g;delete from aq$_ss_MT_tab_h;delete from aq$_ss_MT_tab_i;delete from aq$_ss_MT_tab_p;delete from aq$_ss_MT_tab_s;delete from aq$

org.springframework.core.convert.ConversionFailedException

适用: 1.你在springmvc.xml中写了静态资源处理<mvc:resources location="/" mapping="/**"></mvc:resources> 2.你在springmvc.xml中写了日期类型转换 解决方法: 首先检测你的spring版本,然后 1.spring3.0后将<mvc:resources location="/" mapping="/**">

SQLSERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER

SQL SERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER 前言 本文意于用实例数据帮助理解SQL SERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER。 准备工作 创建测试表:   ? 1 2 3 4 5 create table test( id int identity(1,1)

[LeetCode] 137. Single Number II

题:https://leetcode.com/problems/single-number-ii/ 题目大意 给定array,其中有一个元素只出现了1次,其他元素都出现了3次。 思路 求和 减去 (set(array)*3 - array)/2 作为答案。 class Solution {public int singleNumber(int[] nums) {Set<Long> se

Oracle - ORA-01789: Query block has incorrect number of result columns

一、原因     这个错误一般是在执行表之间的相加(union),相减(minus)等SQL语句时,两个个查询块具有不一致的结果列数所导致的。 二、方案     只要将两段SQL语句的列数调整为一致就可以解决。使用union时,要注意数据库字段的格式要一致,如varchar和nvarchar是不一样的。