分析
二进制的计数规律
1.我们都知道二进制计数中从左到右第一位是2的0次方,第二位是2的1次方,以此类推。
2.当n位次上存放1时,该位数表示的是2^n(二的n次方)
3.且下一位的数会比前面所有位的数加起来都要大。
提出假设
1.先利用for循环找出比所求的数(记作a)刚好大一个二进制位的数(记作2^n)—(根据分析3)
2. 2^(n-1)就是最大位次的1
3. 再用所求数a减去 2^(n-1),就可以得到剩下的数
4. 依次往复,就可以得到1的个数了
实践
初次代码是长这样的:
发现问题1:
再运行一次
重新打for循环的代码进行调试
一步步精简
然后和最开始的代码进行对比
终于得到梦中情码:(欢呼!)
总结错点:
1.暂时存放量b要放在输入值scanf后面,不然b被赋予的就是初始值0.
2.for循环语句的语句2里放的是可以运行的条件,不是跳出循环的条件
结尾
代码出错不可怕,找到错误,分析错误,解决它,精简代码顶呱呱。
关注我,让我们一起成长吧!