前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法篇:数的转换

算法篇:数的转换

作者头像
灰子学技术
发布2020-09-23 15:34:40
3740
发布2020-09-23 15:34:40
举报
文章被收录于专栏:灰子学技术灰子学技术

算法:

这类算法的核心,在于负数的处理,也就是用到补码的转换,num = ((-num)^0xffffffff)+1。

对于不同进制的转换,采用取余数的方式,来进行操作。

对于不同数的转换,利用 a^b 来获取不同的数值,再通过a&(a-1)来将最右边的1清空来操作。

题目1: 数字转换为十六进制 https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal/

代码实现:

代码语言:javascript
复制
func toHex(num int) string {
    // 利用数组存储16位数
    ss := []string{"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}
    res := ""
    a := []string{}
    if num ==0 {
        return "0"
    }
    if num <0 {
        // 负数转换为正数,采用补码的形式
        num = ((-num)^0xffffffff)+1
    }
    for num != 0 {
        // 通过偏移4为的方式来计算每个十六位的数值,八进制的话是0x7
        tmp := num&0xf
        a = append(a, ss[tmp])
        num = num>>4
    }
    // 这里位数,从左到右是高位到低位,所以要转换
    for i:= len(a)-1;i>=0;i-- {
        res += a[i]
    }
    return res
}

执行结果:

题目2:整数转换

https://leetcode-cn.com/problems/convert-integer-lcci/

代码实现:

代码语言:javascript
复制
func convertInteger(A int, B int) int {
    // 负数转换成补码
    if A < 0 {
         A = ((-A)^0xffffffff)+1
    }
    if B < 0 {
         B = ((-B)^0xffffffff)+1
    }
    t := A^B // 用来计算出A和B不同的位数1
    c:=0
    for t != 0{
        t &= (t-1) // 用来将最右边的1设置为0
        c++
    }
    return c
}

执行结果:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灰子学技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档