您的位置:首页 > 职场人生

剑指offer 面试题10

2015-06-28 21:23 316 查看
题目:

请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有两位是1.因此如果输入9,该函数输出2。

我们编程的时候需要注意关于负数的处理,忽略负数容易造成死循环。

有两种解法:

第二种最好

第一种:

#include<iostream>
using namespace std;

int Number(int n)
{
int count=0;
unsigned int flag = 1;
while (flag)
{
if (flag&n)
count++;
flag = flag << 1;

}
return count;
}

int main()
{
int n = -1;
cout<<Number(n);

return 0;
}


第二种:

#include<iostream>
using namespace std;
int Number(int n)
{
int count = 0;
while (n)
{
count++;
n = n&(n - 1);
}
return count;
}

int main()
{
int n = -1;
cout<<Number(n);

return 0;
}


这里我们提一下关于二进制的知识。

数字在二进制中以补码的形式存在,补码的出现可以不用考虑正负的情况,直接实现两个数的加减。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: