首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中进制互换

python中进制互换

作者头像
Ewdager
发布2020-07-14 14:24:05
7570
发布2020-07-14 14:24:05
举报
文章被收录于专栏:Gvoidy备份小站Gvoidy备份小站

十进制转二进制

bin() 返回一个整数 int 或者长整数 long int 的二进制表示。

>>>bin(10)
'0b1010'
>>> bin(20)
'0b10100'

二进制转十进制

>>>int('0b1010', 2)
'10'
>>>int('0b10100', 2)
'20'

LeetCode 相关题目 476. 数字的补数

给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。

注意:

  1. 给定的整数保证在32位带符号整数的范围内。
  2. 你可以假定二进制数不包含前导零位。

示例1:

输入: 5 输出: 2 解释: 5的二进制表示为101(没有前导零位),其补数为010。所以你需要输出2。

示例2:

输入: 1 输出: 0 解释: 1的二进制表示为1(没有前导零位),其补数为0。所以你需要输出0。

我的解法(83.7%):

暴力解法,把数字转换成二进制字符串去掉0b, 用遍历的方法取字符串补码, 再转回十进制数。

class Solution:
    def findComplement(self, num):
        """
        :type num: int
        :rtype: int
        """
        str_num = str(bin(num))[2:]
        anti_num = []
        for e, i in enumerate(str_num):
            if i == '0':
                anti_num.append("1")
            else:
                anti_num.append("0")
        anti_num.insert(0, "0b")
        anti_num = "".join(anti_num)
        return int(anti_num, 2)       

最优解:

class Solution:
    def findComplement(self, num): 
        """
        :type num: int
        :rtype: int
        """
        n = len(bin(num))-2
        return num^(2**n-1)

思路是,取出去除0b的二进制数‘长度’ n, 通过n求出num‘位数’全置1的十进制数, 在与num亦或即可得到补数。(补数的性质啊喂。。。这都没想出来)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 十进制转二进制
  • 二进制转十进制
  • LeetCode 相关题目 476. 数字的补数
    • 我的解法(83.7%):
      • 最优解:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档