求一个正十进制数字,在二进制中存在1的个数.
例如:12这个数字 二进制为:00001100 存在两个1 打印2这个个数
原理:
//15 ---00001111
//15%2 = 1 说明第一位是1
//15/2 = 7 把第四位换成0 ---00000111
//7%2 = 1 说明第二位是1
//7/2 = 3 把第三位换成0 ---00000011
//3%2 = 1 说明第三位是1
//3/2 = 1 把第二位换成0 ---00000001
//1%2 = 1 说明第一位是1
//1/2 = 0 把第四位换成0 ---00000000
不理解可以看看这个视频:94. 算数转换作业讲解_哔哩哔哩_bilibili 跳到7:00的时间
他所使用的不是递归,下面是递归的代码:
int change(int n)
{
if (n % 2 == 1)
{
return 1+change(n / 2); //当有1的时候将返回的值+1,再进行计算
}
else if (n % 2 == 0 && n!=0)
{
return 0+change(n/2); //当是0时,不算返回的值+0(不加值),再进行计算
}
else if (n = 0)
{
return 0;//当数字为0时不必递归了,结束
}
}
int main()
{
int n = 12; //1100
int ret = change(n);
printf("%d\n", ret);
return 0;
}

这篇博客介绍了如何计算一个正十进制数在二进制表示中1的个数。通过非递归和递归两种方法,展示了如何通过除2取余的方式找到二进制中1的数量。博客提供了代码示例,解释了每一步的操作,并提供了一个视频链接供进一步理解。
11万+

被折叠的 条评论
为什么被折叠?



