acgo题库
  • 首页
  • 题库
  • 学习
  • 天梯
  • 备赛

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
  • 竞赛
  • 讨论
  • 团队
  • 商城
登录
注册
题目详情提交记录(0)
  • 题解

    本题主要考察对转进制的掌握。

    userId_undefined
    凌云.本.杰明
    出道萌新时空双修者4月全勤卷王题解仙人倔强青铜进制转换师
    5阅读
    0回复
    2点赞
  • AC题解

    要计算一个十进制非负整数 N 的二进制表示中 1 的个数,核心思路是逐位检查或利用位运算。 常用方法有两种: 逐位右移法 每次检查 N 的最低位(N & 1),如果为 1 则计数加 1。 然后将 N 右移一位(N >>= 1),继续检查新的最低位。 重复直到 N 变为 0。 时间复杂度为 O(log₂N),适用于 N < 10⁹ 的范围。 利用 n & (n-1) 技巧 每执行一次 n = n & (n-1),就会消除 n 的二进制中最右侧的一个 1。 循环执行,统计执行次数,直到 n 为 0。 循环次数等于 1 的个数,比方法一更快(尤其当 1 较少时)。 对于本题,因为 N 最多 10⁹(约 30 位),两种方法都足够。 示例(方法一):N=100(二进制 1100100),过程: 100 & 1 = 0, 计数=0, 右移得 50 50 & 1 = 0, 右移得 25 25 & 1 = 1, 计数=1, 右移得 12 12 & 1 = 0, 右移得 6 6 & 1 = 0, 右移得 3 3 & 1 = 1, 计数=2, 右移得 1 1 & 1 = 1, 计数=3, 右移得 0 结束,输出 3。

    userId_undefined
    哈利·波特
    空间掌握者位操作忍者进制转换师倔强青铜循环·循环打卡人字符串·魔法使
    0阅读
    0回复
    0点赞
暂无数据

提交答案之后,这里将显示提交结果~

首页