首页 > 其他分享 >【405】数字转换为十六进制数

【405】数字转换为十六进制数

时间:2023-08-24 11:24:21浏览次数:32  
标签:tmp 十六进制 转换 res self 405 num return ds

链接:

https://leetcode.cn/problems/convert-a-number-to-hexadecimal/description/

分析:

实话实说,我最怕编码类问题了,因为我真的不会,当时读大学的时候也没学好这块。

我的思路是:

首先对数据进行分类,分成正数、负数和零来分别进行处理。

如果是0,直接返回0就好了。

正数的话,适合除N取余法。

负数的话,可以先转换成正数,然后先转换成反码,然后再转换成补码。

但是,这样转换要注意边界问题,比如给定-2147483648,题目要求32位,那转换成正数2147483648就溢出了,所以我们要预留4位二进制数当溢出余量(本题为36位),等计算完再删掉溢出余量就好了。

代码:

class Solution:
    def toHex(self, num: int) -> str:
        if num == 0:
            return '0'
        elif num > 0:
            return self.int2x(num, 16)
        else:
            minus_b = self.int2x(abs(num), 2)
            b = self.bin2bu(minus_b, flag=True)
            return self.bin2hex(b)

    def int2x(self, num, radix):
        table2 = [0, 1]
        table16 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f']
        table = table2 if radix == 2 else table16
        res = []
        ds = num
        while ds != 0:
            next_ds = ds // radix
            ys = ds % radix
            res.append(str(table[ys]))
            ds = next_ds
        return ''.join(res[::-1])

    def bin2bu(self, b, flag=False):
        tmp = list(b)
        while len(tmp) < 36:
            tmp.insert(0, '0')
        if flag:
            tmp[0] = '1'
            for i in range(1, len(tmp)):
                if tmp[i] == '1':
                    tmp[i] = '0'
                else:
                    tmp[i] = '1'
            remains = 1
            for i in range(len(tmp)-1, -1, -1):
                c_tmp = int(tmp[i]) + remains
                if c_tmp == 2:
                    tmp[i] = '0'
                    remains = 1
                elif c_tmp == 1:
                    tmp[i] = '1'
                    remains = 0
                else:
                    tmp[i] = '0'
                    remains = 0
        return ''.join(tmp)

    def bin2hex(self, b):
        table16 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f']
        res = ''
        flag = False
        for i in range(0, len(b), 4):
            tmp = b[i:i+4]
            val = 8 * int(tmp[0]) + 4 * int(tmp[1]) + 2 * int(tmp[2]) + int(tmp[3])
            if val > 0:
                flag = True
            if flag:
                res += str(table16[val])
        return res[1:]

 

标签:tmp,十六进制,转换,res,self,405,num,return,ds
From: https://www.cnblogs.com/bjfu-vth/p/17653705.html

相关文章

  • 将request中的参数转换成map
    /***将request中的参数转换成map*/publicstaticMap<String,String>requestParamsToMap(HttpServletRequestrequest){Map<String,String>reqMap=newHashMap<>();Enumerationenu=request.getParameterNames();while(enu.hasMoreEl......
  • C++内联函数、引用、强制类型转换
    三、内联函数inline1、普通函数普通函数会被编译成二进制指令存储在代码段中,调用语句会生成一条跳转指令,当程序运行到调用语句时,会跳转该函数在代码段中对应的位置执行,执行结束会返回2、什么是内联函数内联函数也会被翻译成二进制指令,但调用语句不会生成跳转指令,而是直接把内......
  • 朋友圈发圈文案防折叠不折叠转换流量主小程序开发
    朋友圈发圈文案防折叠不折叠转换流量主小程序开发不折叠:转发此条动态,帮我解锁朋友圈新技能,让你的朋友圈精彩!折叠转不折叠:转发此动态,即可开启朋友圈折叠转不折叠的功能,让你的朋友圈变得更加多彩!流量主功能列表:在朋友圈发布广告、赚取流量主收益,让你的好文赚!赚取流量主收益:开启流量主......
  • 支持多数据源联合查询的SQL运行引擎sycnany-SQL使用类型注解和类型转换
    使用介绍安装和配置使用自定义函数sycnany-SQL作为SQL运行引擎并不需要提前定义Schema信息,而且很多数据源本身就是无Schema信息的,例如NoSQL数据库MongoDB,所以从数据源查询数据和运行计算默认直接使用输入数据的类型完成查询和计算,此时查询数据或执行计算可能因数据类型不匹配产......
  • 软件测试 | 数据类型的转换
    Java的数据类型在定义时就已经确定了,因此不能随意转换成其他的数据类型,但Java允许用户有限度地做类型转换处理。数据类型的转换方式可以为“自动类型转换”及“强制类型转换”两种。数据类型的自动转换在程序中已经定义好了数据类型的变量,若要用另一种数据类型表示时,Java会在下列的......
  • LeetCode 算法题解之 26 进制转换 All In One
    LeetCode算法题解之26进制转换AllInOne26进制转换171.ExcelSheetColumnNumber171.Excel工作表列号functiontitleToNumber(columnTitle:string):number{//如何动态生成字典✅26进制//A-Z->1-26conststrs='ABCDEFGHIJKLMNOPQRSTUVWXYZ';......
  • 录音——干声录制与单双声道转换
    录制录音时,发现有录制错误了怎么办最好是开一个新的轨道来进行录制补录完整之后,再整合成一个音频双声道会更有立体感一点如何把单声道的声音变成双声道的新建一个音频文件把单声道的声音丢进去就好了如何吧双声道改成单声道编辑菜单里面,改成单声道文件就可以了......
  • hdu 4055
    http://acm.hdu.edu.cn/showproblem.php?pid=4055#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>usingnamespacestd;constintmod=1000000007;constintsiz......
  • hdu 4055 dp
    http://acm.hdu.edu.cn/showproblem.php?pid=4055#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>usingnamespacestd;constintmod=1000000007;cons......
  • 2023-08-22 SAS数据集与Excel文件之间的批量转换 Batch File Exchange between SAS an
    参考资料:BatchFileExchangebetweenSASandExcel-theMagicofCallExecute我们经常需要在SAS和MSExcel之间传输数据。默认情况下,SASlibnameengine或PROCIMPORT/EXPORT只能在SAS和Excel之间传输单个文件。在多个文件的情况下,一个一个地传输文件会显得过于繁......