<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;
}