微软面试题解析:整数的二进制表示中1的个数

题目:输入一个整数,求该整数的二进制表达中有多少个1。

例如输入10,由于其二进制表示为1010,有两个1,因此输出2。

分析:

使用移位操作,来实现。

具体实现如下:

#include<iostream>  

using namespace std;  

int binary1num(int d)
{
        int cnt = 0;
        while(d/2 != 0)
        {
                if(d%2 == 1) cnt ++;
                d = d/2;
        }
        if(d%2 == 1) cnt ++;
        return cnt;
}  

int main()
{
        cout << "10 has binary bit num: " << binary1num(10) << endl;
        return 0;
}

输出如下:

10 has binary bit num: 2

作者:csdn博客 hhh3h

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, 二进制
, 微软
, 面试题
, 输入
整数
,以便于您获取更多的相关知识。

时间: 2024-08-01 19:19:16

微软面试题解析:整数的二进制表示中1的个数的相关文章

微软面试题解析:求一个矩阵中最大的二维矩阵(元素和最大)

题目:求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度;(3)用C写出关键代码 分析: 直接遍历二维数组,求出最大的二维数组就OK了 实现如下: #include<iostream> using namespace std; int max_matrix(int (*array)[5], int maxx, int maxy, int& posi, int

C++求1到n中1出现的次数以及数的二进制表示中1的个数_C 语言

在从 1 到 n 的正数中 1 出现的次数 题目: 输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数. 例如输入 12,从 1 到 12 这些整数中包含 1  的数字有 1, 10, 1 1 和 12, 1 一共出现了 5 次 代码实现(GCC编译通过): #include "stdio.h" #include "stdlib.h" int count1(int n); int count2(int n); int main(void

《剑指offer》-统计整数二进制表示中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 直观思路就是把二进制表示从右往左统计1的个数.直接想到移位操作来迭代处理.坑点在于负数的移位操作会填充1.有人贴出了逻辑移位操作,但还是麻烦.直接按照int的位数,32或64,做这么多次移位操作就好了,每次移位操作累计是否为1.int的位数是32还是64,可以写一个函数来做到,而不是硬编码. class Solution { public: int NumberOf1(int n) { int cnt = 0; int

java中实现递归计算二进制表示中1的个数_java

借助Java语言,运用递归算法计算整数N的二进制表示中1的个数 /*use the recursive algorithme to calculate * the number of "1" in the binary expression * of an Integer N. * Note:if N is an odd, then * the result is the result of N/2 plus 1. * And the program use the bit opera

统计一个二进制字符串中1的个数的算法

记得在吴军的<数学之美>中有一章讲到布尔代数和搜索引擎的索引.大概是讲通过一个二进制字符串来标识当前关键词在那些文档中出现过.二进制字符串中1的位置就是出现这个词文档的id. 如,一淘 对应一个二进制字符串 1010001.其中在1,5,7三个位置出现了1,说明文档id为1,5,7的文章包含词"一淘".但是在书中没有说如何统计1的个数和位置.现在我补充以下实现算法. 代码如下: #include <iostream> #include <math.h>

微软面试题解析:栈的push、pop序列(栈)

题目:输入两个整数序列.其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序. 为了简单起见,我们假设push序列的任意两个整数都是不相等的. 比如: 输入的push序列是1,2,3,4,5 ,那么4,5,3,2,1就有可能是一个pop序列. 因为可以有如下的push和pop序列: push 1, push 2, push 3, push 4, pop, push 5, pop, pop, pop, pop 这样的的得到的pop序列就是4,5,3,2,1. 但是序列4,

微软面试题解析:实现一个挺高级的字符匹配算法

题目: 给一串很长字符串,要求找到符合要求的字符串,例如目的串:123 1******3***2 ,12*****3这些都要找出来 其实就是类似一些和谐系统. 分析: 自然匹配就是对待匹配的每个字符挨个匹配 设你的待匹配字串长度位n,模式字符串长度位m. 对于待匹配字符串中的任意一个字符最坏情况下要匹配m次,也就是说这个字符不在模式字符串中. 所以最坏情况下总共是m*n此匹配,时间复杂度就是O(m*n) 更多精彩内容:http://www.bianceng.cnhttp://www.biance

微软面试题解析:使用多线程实现一个队列

题目:实现一个队列 队列的应用场景为: 一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列. 分析: 首先得设计一个队列,并且最好是循环队列,否则队列里面的空间很容易一下就使用完了. 题目要求使用生产者线程和消费者线程,所以得设计成线程保护,否则取数据和推送数据很容易搞错.可以使用线程的互斥变量:pthread_mutex_t 加pthread_mutex_lock 锁,解锁:pthread_mutex_unlock 比如:生产者线程每隔1s推送:1,2,3,4,5,6,7,

微软面试题解析:调整数组顺序使奇数位于偶数前面(数组)

题目: 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分.要求时间复杂度为O(n). 分析: 只需要设置头尾两个指针遍历就可以了,前面遇到偶数记下来,后面遇到奇数记下来,交换,知道后面的指针小于前面的指针. 更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/ 实现如下: #include<iostream> #include<stdio.h> #