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

如何用C语言实现十进制到二进制的转换并计算二进制中1的个数

2016-09-26 15:25 393 查看
<pre class="csharp" name="code">#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num, temp, i = 0, k = 0, arr[100];
printf("请输入一个十进制的数:\n");
scanf("%d", &num);
while (num != 0)
{
temp = num % 2;
num = num / 2;
arr[i++] = temp;

}
while (i > 0)
{
temp = arr[--i];
if (arr[i] == 1)
k++;
printf("%d", temp);
}
printf("\n");
printf("一共有%d个1", k);
system("pause");
return 0;
}

小结:十进制转换成二进制要注意:每次取得的余数要先暂时存放在一个数组里,因为最后转换成的二进制是通过十进制对2求余的余数自下而上排列的,需要将余数逆置否则就会发生错误.。这个程序需要一个while循环,因为不知道它的循环次数所以不能采用for循环。
该程序是运行过的,没有问题,因为是菜鸟级别的所以有什么不足之处希望大家能提出来,让我及时改正。


方法二:用按位与右移的运算来实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int data,count=0;
scanf("%d", &data);
while (data > 0)
{
{ if (data & 0x1)
count++;
}
data >>= 1;
}
printf("%d个1", count);
system("pause");
return 0;
}

方法三:减一操作来实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int data,count=0;
scanf("%d", &data);
while (data)
{
data&=(data - 1);
count++;
}
printf("%d个1", count);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: