剑指offer 面试题10
2015-06-28 21:23
316 查看
题目:
请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有两位是1.因此如果输入9,该函数输出2。
我们编程的时候需要注意关于负数的处理,忽略负数容易造成死循环。
有两种解法:
第二种最好
第一种:
第二种:
这里我们提一下关于二进制的知识。
数字在二进制中以补码的形式存在,补码的出现可以不用考虑正负的情况,直接实现两个数的加减。
请实现一个函数,输入一个整数,输出该数二进制表示中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; }
这里我们提一下关于二进制的知识。
数字在二进制中以补码的形式存在,补码的出现可以不用考虑正负的情况,直接实现两个数的加减。
相关文章推荐
- 剑指Offer--面试题29:数组中出现超过一半的数字
- 黑马程序员——网络编程
- 黑马程序员——反射
- 黑马程序员——IO流
- 黑马程序员——集合框架
- 黑马程序员——String
- 黑马程序员——面向对象(四)
- 黑马程序员——面向对象(三)
- 黑马程序员——面向对象(二)
- 黑马程序员——面向对象(一)
- 黑马程序员——Java基础组成
- 从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用
- 关于Java类加载双亲委派机制的思考(附一道面试题)
- 黑马程序员——Java基础——异常
- 程序员常去的14个顶级开发社区
- Android实习周记:第八周,职场里有真感情吗?我的回答是T_T
- 程序员在家开发,如果保证代码不泄漏?
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- 马士兵教你如何面试(记录原话)
- 剑指offer--面试题28:字符串的排列--Java实现