题解 | #求int型正整数在内存中存储时1的个数#
求int型正整数在内存中存储时1的个数
https://www.nowcoder.com/practice/440f16e490a0404786865e99c6ad91c9
#include <stdio.h> int main() { int num,count=0; scanf("%d",&num); while(num!=0) { if(num%2==1) count++; num=num/2; } printf("%d",count); return 0; }
求一个十进制数的二进制形式,方法如下:
1、将该数除以2,记录余数;
2、看第一步的商是否为0,如不为0,则继续第1步操作;
3、当商为0时,将余数按照从最后一步到第一步的顺序写出来,即为这个数的二进制形式。
例如:将25转化为二进制数。
25÷2=12……1
12÷2=6(余0)
6÷2=3(余0)
3÷2=1……1
1÷2=0……1
因此25的二进制形式为11001,不难发现,任何int型正整数在内存中存储时,含有的1个数即为短除2时余1的次数。因此可设置循环体,当输入的数短除2余1时,1的个数count++,直到商为0为止。