二进制中有多少个1
2015-11-05 20:41
183 查看
问题:
计算在一个 32 位的整数的二进制表式中有多少个 1。样例:
给定 32 (100000),返回 1。给定 5 (101),返回 2。
给定 1023 (111111111),返回 9。
分析:
1、需要考虑是负数的情况,如果是负数,则二进制的第一位为1,首先需要处理这个1,即:num^0x800000002、然后计算剩下的1,依次检查该数转化为二进制时的每一位。即每次与1相&,并检测是否为1,然后将该数向右移动一位。
代码:
class Solution { public: int countOnes(int num) { int count = 0; if (num < 0) { count++; num = num ^ 0x80000000; } while (num > 0) { if (num & 1) { count++; } num = num >> 1; } return count; } };
相关文章推荐
- LintCode-最大数
- Subtree
- LintCode --number-of-airplanes-in-the-sky(数飞机)
- LintCode --invert-binary-tree(翻转二叉树)
- LintCode --find-the-missing-number(寻找缺失的数)
- LintCode--best-time-to-buy-and-sell-stock(买卖股票的最佳时机)
- LintCode--best-time-to-buy-and-sell-stock-ii(买卖股票的最佳时机 II)
- 中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数
- LintCode 翻转二叉树
- LintCode 寻找缺失的数
- Lintcode 二叉树的后序遍历
- Lintcode 二叉树中序遍历
- Lintcode 二叉树前序遍历
- Lintcode 尾部零的个数
- Lintcode 比较字符串
- Lintcode 主元素
- Lintcode解题笔记 - 岛屿的个数
- LintCode -合并两个排序链表
- 20150708 lintcode 总结 Binary Tree Maximum Path Sum Show result *****
- 20150708 lintcode 总结 Minimum Path Sum