您的位置:首页 > 编程语言 > C语言/C++

用c语言实现输入一个十进制数,计算其转换为二进制数后其中包含1的个数

2015-03-19 20:13 393 查看
这个问题有两个解决方法。第一个就是用我们平时十进制转换二进制的算法,即短除法。

第二个就是用其本身与上其二进制数减一,

例如:x&(x-1) 当x=5时, 5的二进制是0101

0101 & (0101-1) == 0101 & 0100 == 0100

0100 & (0100-1) == 0100 & 0011 == 0000

一共计算了两次,也就是说5的二进制数一共只有2个1.

下面是代码实现:

#include<stdio.h>
int count_bits(unsigned int value)//定义形参
{

int one = 0;//定义计数器
while(value != 0)
{
if(value % 2 == 1)//短除法计算
{
one ++;
value = value / 2;
}
}
return one;
}
int main()
{
int ret = 0;
ret = count_bits(15);//调用函数
printf("%d\n",ret);
return 0;
}


这是第二种算法:

#include<stdio.h>
int count_bit(unsigned int value)
{
int count = 0;
while(value)
{
count++;
value = value & (value - 1);//value与其二进制减1,结果再赋给value
}
return count;//返回计数器
}

int main()
{
int ret = 0;
ret = count_bit(5);
printf("%d\n",ret);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐