主要是看怎么将一个整数用逻辑的思维将其变成二进制数。
不能用我们口头算时常用的8421法,因为要是用8421法会大大增加代码编辑难度,所以我用了将一个整数先 %2 再 /2 的方法,例如:
13:
13%2.................1
13/2...................6
6%2...................0
6/2.....................3
3%2...................1
3/2.....................1
1%2...................1
1/2.....................0
从下到上数红色的数字,这样可以判断13的二进制为1101
但经过程序运算储存到数组是从上到下的顺序,也就是例如13经过运算后的储存为1011
所以需要在输出数组前加一个将数组倒置的环节。
#include<stdio.h>
//将一个整输出为二进制并判断有几个1
int main()
{
int m[32];
int k,j;
int b=0;
printf("输入一个数:\n");
scanf("%d",&k);
int i = 0;
while(k != 0)//在判断到最后k经过运算得0的时候退出循环
{
if( k%2 != 0)
{
m[i] = 1;
i++;
b++;//通过b++可以判断出有几个1
}
else
{
m[i] = 0;
i++;
}
k = k/2;
}
for(j=i-1 ; j>=0; j--)
{
printf("%d",m[j]);
}
printf("\n");
printf("有%d个1\n",b);
return 0;
}
运行结果: