[华为机试练习题]45.求某二进制数中1的个数

题目

描述: 题目标题:

求某二进制数中1的个数。

给定一个unsigned int型的正整数,求其二进制表示中“1”的个数,要求算法的执行效率尽可能地高。

详细描述:

原型:

int GetCount(unsigned int num)

输入参数:

 num     给定的正整数

输出参数(指针指向的内存区域保证有效):

返回值:

返回1的个数

举例:

输入13,则对应的二进制是1101,那么1的个数为3个。则:返回3。

练习阶段:

初级

代码

/*---------------------------------------
*   日期:2015-07-03
*   作者:SJF0115
*   题目:求某二进制数中1的个数
*   来源:华为机试练习题
-----------------------------------------*/
#include "OJ.h"
#include <iostream>
using namespace std;

/*
Description
         给定一个unsigned int型的正整数,求其二进制表示中“1”的个数,要求算法的执行效率尽可能地高。
Prototype
         int GetCount(unsigned int num)
Input Param
         num     给定的正整数
Output Param
         无
Return Value
         返回1的个数
*/
int GetCount(unsigned int num){
    int x = num;
    int count = 0;
    while(x){
        x = x & (x - 1);
        ++count;
    }//while
    return count;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-25 12:26:59

[华为机试练习题]45.求某二进制数中1的个数的相关文章

[华为机试练习题]56.求子数组的最大和

题目 描述: 输入一个整形数组.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值. 接口 Int GetSubArraySum(Int* pIntArray,Int nCount): 规格 要求时间复杂度为O(n) 举例 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18 练习阶段: 初级 代码 /*-------------------------------

[华为机试练习题]50.求M的N次方的最后三位

题目 描述: 正整数M 的N次方有可能是一个非常大的数字,我们只求该数字的最后三位 例1: 比如输入5和3 ,5的3次方为125,则输出为125 例2: 比如输入2和10 2的10次方为1024 ,则输出结果为24 例3: 比如输入111和5 111的5次方为116850581551,则输出结果为551 练习阶段: 初级 代码 /*--------------------------------------- * 日期:2015-07-04 * 作者:SJF0115 * 题目:求M的N次方的最后

[华为机试练习题]42.求二叉树的深度和宽度

题目 题目标题: 求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度. 例如输入 a / b c / \ / d e f g 返回3. 接口说明 原型: int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) 输入参数: head 需要获取深度的二叉树头结点 输出参数(指针指向的内存区域保证有效): pulWidth 宽度 pulHeight 高度 返回值: 0 成功 1 失败或

[华为机试练习题]46.计算二进制数的0的个数

题目 描述: 输入一个10进制数字,请计算该数字对应二进制中0的个数,注意左数第一个1之前的所有0都不需要计算.不需要考虑负数的情况. 题目类别: 位运算 难度: 初级 运行时间限制: 无限制 内存限制: 无限制 阶段: 入职前练习 输入: 要计算的十进制非负数 输出: 二进制中第一个1之后0 的个数 样例输入: 2 样例输出: 1 代码 /*--------------------------------------- * 日期:2015-07-03 * 作者:SJF0115 * 题目:计算二

[华为机试练习题]36.简单错误记录(错误 求正解)

题目 描述: 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号. 处理: 1. 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加: 2. 超过16个字符的文件名称,只记录文件的最后有效16个字符: 3. 输入的文件可能带路径,记录文件名称不能带路径. 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 一行或多行字符串.每行包括带路径文件名称,行号,以空格

[华为机试练习题]48.阿姆斯特朗数

题目 描述: 如果一个正整数等于其各个数字的立方和,则该数称为阿姆斯特朗数(亦称为自恋性数),1除外,如407 = 43+03+73就是一个阿姆斯特朗数.试编程求n(n ≤ 65536)以内的所有阿姆斯特朗数. 接口说明 原型: int CalcArmstrongNumber(int n); 输入参数: int n: n ≤ 65536 返回值: n以内的阿姆斯特朗数的数量 练习阶段: 初级 代码 /*--------------------------------------- * 日期:20

[华为机试练习题]51.数列求和

题目 描写叙述: 题目描写叙述 编敲代码,输入一个正整数n.求下列算式的值.要求定义和调用函数fact(k)计算k的阶乘. 1+1/2!+ .... +1/n! 计算结果保存在double类型变量中. 接口说明 原型: void GetResult(int InputNum, double *NumResult); 输入參数: Int InputNum:输入一个正整数,进行表达式计算 char *NumResult:输出表达式的值 返回值: void 练习阶段: 0基础 代码 /*-------

[华为机试练习题]44.24点游戏算法

题目 注意: 6 + 2 * 4 + 10 = 24 不是一个数字一个数字的计算 代码 /*--------------------------------------- * 日期:2015-07-03 * 作者:SJF0115 * 题目:24点游戏算法 * 来源:华为机试练习题 -----------------------------------------*/ #include <iostream> #include <string> #include <vector&

[华为机试练习题]58.查找同构数的数量

题目 描写叙述: 找出1至n之间同构数的个数. 同构数是这样一组数:它出如今平方数的右边.比如:5是25右边的数.25是625右边的数,5和25都是同构数. 具体描写叙述: 接口说明 原型: intSearchSameConstructNum(int n); 输入參数: int n:查找1至n之间的所有同构数 返回值: int:1至n之间同构数的个数 练习阶段: 0基础 代码 /*--------------------------------------- * 日期:2015-07-05 *