You need to enable JavaScript to run this app. 统计1到n总set-bits的C++循环代码错误排查
优惠活动
大模型
产品
解决方案
定价
更多

统计1到n总set-bits的C++循环代码错误排查

代码核心问题说明
  • 关键逻辑错误:外层循环控制变量被篡改
    外层for循环的设计目标是依次遍历1到n的每一个整数,对每个整数单独统计二进制中1的个数(set bit)并累加结果。但你在内层while做逐位检查时,直接对用于外层遍历的循环变量i执行右移操作,把i的值逐步移位到0,完全破坏了外层循环的遍历节奏。
  • 实际运行表现
    只要输入的n>=1,程序会直接陷入无限循环,根本无法正常输出结果:
    1. 程序完成初始化后,第一次进入循环体时i=1,内层while检测到i的最低位为1,res累加1,随后i被右移操作改为0,内层循环退出
    2. 循环体执行完毕后,for循环触发自增逻辑:i从0自增为1,此时回到循环条件判断,依然满足i<=n的要求,会再次进入循环体
    3. 整个过程永远不会遍历到2、3…n这些待统计的数字,res会持续累加,程序既不退出也不会输出最终的统计值。
简单修正方案

统计单个数字的set bit时,不要直接修改原遍历用的i,新增一个临时变量承接右移操作即可,修改后的核心循环逻辑如下:

for(int i=1;i<=n;i++)
{
    int cur = i; // 用临时变量存储当前待统计的数字,避免修改原循环变量
    while(cur > 0)
    {
        if((cur & 1) == 1) // 检查最低位是否为1
        {
            res++;
        }
        cur = cur >> 1; // 右移临时变量,逐位检查
    }
}

内容的提问来源于stack exchange,提问作者user14270011

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 04:15:04