开发者社区> 问答> 正文

遇到一个位运算的问题,求解答。

给两个数字 l、r,问在区间 [l,r] 内的所有数中,二进制表示下“1”的个数最多的一个数是多少,如果有多个相同的,输出所有符合条件的数中最小的一个数。输入一个整数 l, 和一个整数 r。(1<=l<=r<=10^9)输出一个数字表示 [l,r] 内二进制下“1”的个数最多的数。如果有多个,输出符合条件的数中最小的。

展开
收起
游客4skzfvnrxrzbi 2021-12-23 15:45:53 425 0
1 条回答
写回答
取消 提交回答
  • 根据题意,本题的所有数字应从二进制角度考虑。所求数字可分为两部分,高位部分和低位部分,高位部分的值等于 l, r 高位相等的部分,在区间 [l,r] 中的所有数的高位部分都应该与其相等,即high = r & (-1< 低位的部分计算过程如下: 如果r-high的值的二进制全为 1,则低位部分为r-high。如果不是全为 1,则低位部分为 (1<<(count-1))-1 因此输入:5 10 输出:7

    2021-12-23 18:18:11
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载