【面试题】剑指offer10--求一个数的二进制数中的1的个数
2017-06-14 18:09
218 查看
求一个数二进制数中的个数
第一种方法:模除法
代码如下:
第一种方法:模除法
代码如下:
//Q:请实现一个函数,输入一个整数,输出该数二进制中的 //1的个数。例如:把9表示成二进制是1001,有2位是1.因此,如果输入是9 //改函数输出2。 #include<iostream> using namespace std; int TheNumOf1(int num)//统计二进制中1的个数 { int count = 0; while (num) { if (num % 2 == 1) { count++; } num = num / 2; } return count; } int main() { int num = 0; int ret = 0; cout << "请输入一个数字:"; cin >> num; ret = TheNumOf1(num); cout << num << "的二进制数中的1的个数为:" << ret << endl; system("pause"); return 0; }第二种方法:第一种方法的优化,解决传入的数字是负数的问题
//Q:请实现一个函数,输入一个整数,输出该数二进制中的 //1的个数。例如:把9表示成二进制是1001,有2位是1.因此,如果输入是9 //改函数输出2。 #include<iostream> using namespace std; int TheNumOf1(unsigned int num) { int count = 0; while (num) { if (num % 2 == 1) { count++; } num = num / 2; } return count; } int main() { int num = 0; int ret = 0; cout << "请输入一个数字:"; cin >> num; ret = TheNumOf1(num); cout << num << "的二进制数中的1的个数为:" << ret << endl; system("pause"); return 0; }第三种方法:对前两种方法的优化,为了解决没一个数字都是32位的比特位,使用下面的方法:
//Q:请实现一个函数,输入一个整数,输出该数二进制中的 //1的个数。例如:把9表示成二进制是1001,有2位是1.因此,如果输入是9 //改函数输出2。 #include<iostream> using namespace std; int TheNumOf1(unsigned int num) { int count = 0; for (int i = 1; i < 32; i++) { if (num % 2 == 1) { count++; } num = num / 2; } return count; } int main() { int num = 0; int ret = 0; cout << "请输入一个数字:"; cin >> num; ret = TheNumOf1(num); cout << num << "的二进制数中的1的个数为:" << ret << endl; system("pause"); return 0; }第四种方法:使用按位与的方法,可以更快的运行程序
//Q:请实现一个函数,输入一个整数,输出该数二进制中的 //1的个数。例如:把9表示成二进制是1001,有2位是1.因此,如果输入是9 //改函数输出2。 #include<iostream> using namespace std; int TheNumOf1(unsigned int num) { int count = 0; while (num) { num = num&(num - 1); count++; } return count; } int main() { int num = 0; int ret = 0; cout << "请输入一个数字:"; cin >> num; ret = TheNumOf1(num); cout << num << "的二进制数中的1的个数为:" << ret << endl; system("pause"); return 0; }使用这几种方法都可以求解出一个数二进制数中的1的个数
相关文章推荐
- 面试题-求一个数的二进制数中1的个数(2)
- 剑指offer——面试题21:包含min函数的栈(泛型编程,一个巧妙的思维)
- 【面试题】剑指offer18--判断一个二叉树是否为另一个二叉树的子结构
- [剑指offer][面试题04]实现一个函数,将字符串中的空格替换为“ ”.例如输入“we are happy.”,输出"we are happy.".
- 【面试题】剑指Offer-24-判断一个数组是不是某颗二叉搜索树的后序遍历
- 【面试题】剑指Offer-7-两个栈实现一个队列
- 剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)
- 剑指Offer面试题5——倒序输出一个链表
- 剑指offer面试题之求一个整数二进制中1的个数
- 【面试题】剑指Offer-13-在O(1)的情况下删除一个节点
- 剑指offer——面试题48:用C++设计一个不能被继承的类
- 剑指offer面试题48 C++写一个不能被继承的类
- 剑指offer——面试题10输入一个十进制整数,统计其中二进制1的个数
- 剑指offer之面试题7用两个栈实现一个队列
- 【面试题】剑指Offer-2-如何控制一个类生成对象的个数
- 【面试题】剑指offer20--顺时针打印一个矩阵的数字
- 剑指offer——面试题39:扩展问题判断一个树是否是平衡二叉树(递归)
- 剑指offer面试题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
- 面试题-求一个数的二进制数中1的个数
- 剑指offer面试题java实现之题7:用两个栈模拟一个队列的入队和出队操作