HWOJ 查找输入整数二进制中1的个数
来源:互联网 发布:产品经理mac软件 编辑:程序博客网 时间:2024/05/20 14:17
HWOJ 查找输入整数二进制中1的个数
题目:查找输入整数二进制中1的个数
题目分析:
思路一:
利用位运算来做,所以我们不需要把输入的十进制转化为2进制;
直接先将n 与 1进行位运算,这样检测最右边的数是不是为1,之后将n右移动一位,直到n不为0
思路二:
由于思路一有两个弊端,①是时间比较长 ②如果为输入为负数的时候就不正确,所以我们尽量不右边移动输入数字i,我们首先与1与以下,判断最低次位是不是1,接着把1左移一位得到2再和i做位运算,就能判断次高位是不是1,这样反复左移,每次总能判断i的其中一位是不是1.
学习笔记:
位运算比乘除法好,效率高
==============================================================================
参考代码1:
//查找输入整数二进制1的个数.cpp //2014.07.06 #include <iostream> #include <time.h> using namespace std; int findNumberOf1(int n) { int count = 0; while(n) { if(n & 1) count ++; n = n >> 1; } return count; } int main() { int n; cin >> n; cout << findNumberOf1(n) << endl; cout << (double)clock() / CLOCKS_PER_SEC; return 0; }
注意:这里我加了time.h头文件测其时间,因为这个再华为OJ测试说时间超过了。
参考代码2:
//查找输入整数二进制1的个数.cpp//2014.07.06#include <iostream>#include <time.h>using namespace std;int findNumberOf1(int n){ int count = 0; unsigned int flag = 1; while(flag) { if(n & flag) count ++; flag = flag << 1; } return count;}int main(){ int n; cin >> n; cout << findNumberOf1(n) << endl; cout << (double)clock() / CLOCKS_PER_SEC; return 0;}
0 0
- HWOJ 查找输入整数二进制中1的个数
- 华为OJ:查找输入整数二进制中1的个数
- 查找输入整数二进制中1的个数
- 【华为OJ】查找输入整数二进制中1的个数
- 查找输入整数二进制中1的个数
- 查找输入整数二进制中1的个数
- 查找输入整数二进制中1的个数
- 华为oj_查找输入整数二进制中1的个数
- 华为oj 查找输入整数二进制中1的个数
- 查找输入整数二进制中1的个数
- 查找输入整数二进制中1的个数
- 华为oj 查找输入整数二进制中1的个数
- *查找输入整数二进制中1的个数
- 查找输入整数二进制中1的个数
- Java实现查找输入整数二进制中1的个数
- 查找输入整数二进制中1的个数
- 华为OJ题库-查找输入整数二进制中1的个数
- 华为OJ基础篇-查找输入整数二进制中1的个数
- spring的AOP配置
- HWOJ 超长正整数相加
- 了解bls签名
- HWOJ 图片整理
- 一个简单的线程池实现(java版)
- HWOJ 查找输入整数二进制中1的个数
- HWOJ 计算字符串最后一个单词长度
- c++中静态成员变量的两个特殊属性
- HWOJ 计算字符的个数
- 递归算法
- [转载]1 Android手机目前常见的分辨率
- 了解一些概念
- preventDefault()方法和stopPropagation()方法的使用
- Activex调试以及m_hWnd为空 解决办法