高端网站制作公,北京ui及网页设计,广东企业移动网站建设哪家好,wordpress ppt预览题目链接#xff1a;查找输入整数二进制中1的个数_牛客题霸_牛客网 (nowcoder.com) 解题思路#xff1a; 解法一: 可以举一个八位的二进制例子来进行分析#xff0c;对于二进制操作#xff0c;我们直到#xff0c;除以一个2#xff0c;原来的数字会减少一个0.如果除的过程…题目链接查找输入整数二进制中1的个数_牛客题霸_牛客网 (nowcoder.com) 解题思路 解法一: 可以举一个八位的二进制例子来进行分析对于二进制操作我们直到除以一个2原来的数字会减少一个0.如果除的过程有余数那么就表示当前位置有一个1. 以10 100 010为例 第一次除以2时商为10 100 001 余数为0 第二此除以2时商为101 000 余数为1 因此可以考虑利用整形数据除法的特点通过相除和判断余数的值来进行分析。 解法二: 是计算一个数二进制表示中1的个数通过n i) 1可以获取第i位的二进制值每次n右移一位可 以获取一位的二进制值右移32次n变成0循环终止。 解法三 利用valvalval-1巧妙解法能最少次数统计1的个数 假设整数为4791 0000 0000 0000 0000 0001 0010 1011 0111 0000 0000 0000 0000 0001 0010 1011 0110 count1 0000 0000 0000 0000 0001 0010 1011 0110 0000 0000 0000 0000 0001 0010 1011 0101 count2 0000 0000 0000 0000 0001 0010 1011 0100 0000 0000 0000 0000 0001 0010 1011 0011 count3 0000 0000 0000 0000 0001 0010 1011 0000 ................... 有几个1就统计几次 代码实现
#include iostream
using namespace std;//解法一:
// int Count(size_t val)
// {
// int count0;
// for(int i0;i32;i)
// {
// if(val%21)
// count;
// valval/2;
// }
// return count;
// }
// int Count(size_t val)
// {
// int count0;
// while(val)
// {
// if(val%21)
// count;
// valval/2;
// }
// return count;
// } // 解法二://int Count(size_t val)
//{
// int count0;
// for(int i0;i32;i)
// {
// if((val0x01)1)
// count;
// valval1;
// }
// return count;
//}
//解法三:
int Count(size_t val)
{int count0;while(val){valval(val-1);count;}return count;
}int main()
{size_t n0;while(cinn){int countCount(n);coutcountendl;}return 0;
}