题目描述:给定一个正整数,找出与其二进制表示1的个数相同、略大和略小的2个数
# 获取略大的数
def getNext(num):# n是为了统计出p和c1、c0n = numc1 = 0c0 = 0while n&1 == 0 and n != 0:c0 += 1n >>= 1while (n&1) == 1:c1 += 1n >>= 1p = c0+c1# 类似于11111……0000这种输入和全0的输入if p == 31 or p == 0:return 'error'num |= 1<<p # 将p位翻转为1num &= ~((1<<p)-1) # 将p位后的清零,注意不能直接与1<<p,因为这样前面的都置为0num |= (1 << (c1-1)) - 1 # 将最后几位填成1return num
# 获取略小的数
def getPrev(num):n = numc1 = 0c2 = 0while n&1 == 1:c1 += 1n >>= 1# 判断全0或者全1的情况if n == 0:return 'error'while n&1 == 0 and n != 0:c0 += 1n >>= 1p = c0+c1# 将p位及以后的置0num &= (~0<<(p+1))# 在p后面放c1+1个1mask = (1<<(c1+1))-1num |= mask << (c0-1)return num
本文发布于:2024-02-02 17:32:31,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170686635245353.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |