【牛客】HJ62 查找输入整数二进制中1的个数

news/2024/5/30 17:36:42/文章来源:https://blog.csdn.net/weixin_62529445/article/details/136692396

题目链接:查找输入整数二进制中1的个数_牛客题霸_牛客网 (nowcoder.com)

解题思路:

解法一:

可以举一个八位的二进制例子来进行分析,对于二进制操作,我们直到,除以一个2,原来的数字会减少一个0.如果除的过程有余数,那么就表示当前位置有一个1.

以10 100 010为例

第一次除以2时,商为10 100 001 余数为0

第二此除以2时,商为101 000 余数为1

因此,可以考虑利用整形数据除法的特点,通过相除和判断余数的值来进行分析。

解法二:

是计算一个数二进制表示中1的个数,通过(n >> i) & 1可以获取第i位的二进制值,每次n右移一位,可 以获取一位的二进制值,右移32次,n变成0,循环终止。

解法三:

利用val=val&(val-1)巧妙解法能最少次数统计1的个数

假设整数为4791

0000 0000 0000 0000 0001 0010 1011 0111

0000 0000 0000 0000 0001 0010 1011 0110

==================================  count=1

0000 0000 0000 0000 0001 0010 1011 0110

0000 0000 0000 0000 0001 0010 1011 0101

==================================  count=2

0000 0000 0000 0000 0001 0010 1011 0100 

0000 0000 0000 0000 0001 0010 1011 0011

==================================  count=3

0000 0000 0000 0000 0001 0010 1011 0000

...................

有几个1就统计几次

代码实现:

#include <iostream>
using namespace std;//解法一:
// int Count(size_t val)
// {
//     int count=0;
//     for(int i=0;i<32;i++)
//     {
//         if(val%2==1)
//         count++;
//         val=val/2;
//     }
//     return count;
// }
// int Count(size_t val)
// {
//     int count=0;
//     while(val)
//     {
//         if(val%2==1)
//         count++;
//         val=val/2;
//     }
//     return count;
// } // 解法二://int Count(size_t val)
//{
//    int count=0;
//    for(int i=0;i<32;i++)
//    {
//        if((val&0x01)==1)
//        count++;
//        val=val>>1;
//    }
//    return count;
//}
//解法三:
int Count(size_t val)
{int count=0;while(val){val=val&(val-1);count++;}return count;
}int main()
{size_t n=0;while(cin>>n){int count=Count(n);cout<<count<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1005749.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业微信高效沟通的秘诀

在数字化营销的浪潮中&#xff0c;企业微信已成为连接企业和客户的重要渠道。为了提升客户服务效率&#xff0c;许多企业通过设置快捷回复语来优化客户接待流程。然而&#xff0c;随着客户量的激增&#xff0c;传统的快捷回复已无法完全满足需求。今天&#xff0c;我要为大家介…

使用 Git 跟踪项目文件

本章内容为&#xff1a;用Django 写学习笔记程序第三章.2部署程序摘录&#xff0c;详情内容查看请跳转下方链接&#xff1a; 用Django 写学习笔记程序第三章.2部署程序 文章目录 使用 Git 跟踪项目文件虚拟环境中安装 gitgit 是什么git 安装完成后的简单配置创建项目忽略文件初…

[AutoSar]BSW_Com013 CAN TP 模块配置

目录 关键词平台说明一、缩写对照表二、Functional Description&#xff08;vector&#xff09;2.1 Asynchronous and Synchronous behavior of CanTp_Transmit2.1.1 asynchronous 2.1.2 synchronous2.2 Separation Time by Application 三、CanTpChannels3.1 接收端3.2 发送端…

element---tree树形结构(返回的数据与官方的不一样)

项目中要用到属性结构数据&#xff0c;后端返回的数据不是官方默认的数据结构&#xff1a; <el-tree:data"treeData":filter-node-method"filterNode":props"defaultProps"node-click"handleNodeClick"></el-tree>这是文档…

运行springboot项目提示:java: 错误: 不支持发行版本 18、java: 错误: 无效的源发行版:18

java: 错误: 不支持发行版本 18 解决方法&#xff1a;修改字节码版本&#xff0c;可以多试几次。 java: 错误: 无效的源发行版&#xff1a;18 解决方法&#xff1a; 出现这些错误原因&#xff1a; spring版本与jdk版本不对应 我的spring boot版本是3.2.2&#xff0c;对应的j…

5、设计模式之原型模式(Prototype)

一、什么是原型模式 原型模式属于创建型设计模式。通过复制现有的实例来创建新的实例&#xff0c;无需知道相应类的信息。 简单的讲就是当我需要创建一个指定的对象时&#xff0c;刚好现在就有这个对象&#xff0c;但又不能直接使用&#xff0c;所以简单的方式就是克隆一个一摸…

【阿里云系列】-基于云效构建部署Springboot项目到ACK

介绍 为了提高项目迭代的速度加速交付产品给客户&#xff0c;我们通常会选择CICD工具来减少人力投入产生的成本&#xff0c;开源的工具比如有成熟的Jenkins&#xff0c;但是本文讲的是阿里云提高的解决方案云效平台&#xff0c;通过配置流水线的形式实现项目的快速部署到服务器…

Golang入门简介与基本语法学习

简介 Golang的出现背景 Go语言&#xff0c;或我们通常称之为Golang&#xff0c;它的设计哲学深受其创造者的软件开发经验影响&#xff0c;它旨在实现快速编译、高性能、静态类型检查以及简洁明了的代码风格。 是由Google开发的一个开源编程语言&#xff0c;它首次公布于2009…

Qt(C++) | QPropertyAnimation动画(移动、缩放、透明)篇

动画类继承关系图 # QPropertyAnimation QPropertyAnimation是一个可以在Qt应用程序中使用的动画框架。它可以用于创建各种动画效果,包括但不限于以下几种: 1. 移动动画:可以将一个对象从一个位置平滑地移动到另一个位置。比如,你可以创建一个按钮,当用户点击它时,按钮…

短视频解析接口分发系统

宝塔面板&#xff1a;Nginx系统 php7.2 Mysql 5.6-5.7 伪静态Thinkphp 上传文件直接访问域名安装即可 可以自备 听说后边要出saas去水印小程序 下载地址&#xff1a;https://pan.xunlei.com/s/VNskSEelfRVIzoSm5P5Rcw34A1?pwdqzhh# 接口演示&#xff1a; 前端演示…

王道机试C++第 5 章 数据结构一:向量vector和蓝桥杯13年两个程序 Day31

5.1 向量 有限个类型相同的变量的线性集合&#xff0c;组成数组的各个变量称为数组的元素。给每个元素分配唯一的一个下标&#xff0c;就能用这个下标指代该元素。还可通过下标直接访问数组中的任何一个元素&#xff0c;并且这些访问能在常数时间内完成。 1&#xff0e;STL-v…

TortoiseSVN 报错:The server unexpectedly closed the connetion

前言 CentOS7Linux 安装subversionmod_dav_svn&#xff0c;搭建subversion(svn)服务器 The server unexpectedly closed the connetion 解决办法 重启Apache服务 shell> systemctl restart httpd

【Ubuntu】将多个python文件打包为.so文件

1.为什么要将python打包为.so文件&#xff1f; 保护源码 2.实战例子 a.安装相应的包 pip install cython 验证安装是否成功 cython --version b.实战的文件目录和内容 hi.py # This is a sample Python script.# Press ShiftF10 to execute it or replace it with your…

安装包逆向1

1.找到程序的入口点 在IDA中我们看到函数非常多&#xff0c;但是一般都是有主要的入口的&#xff0c;所以找一下有没有主函数 可以直接 CtrF直接查找 CNsInstaller::CNsInstaller 这里搞半天在获取文件路径 CNsInstaller::StartInstall CNsInstaller::InstallFunc char…

苍穹外卖学习-----2024/03/010---redis,店铺营业状态设置

1.Redis入门 2.在Java中操作Redis 3.店铺营业状态设置 BUG!!! 今天在启动项目时&#xff0c;用到了Redis缓存数据库&#xff0c;但是却出现了报错信息&#xff1a; ERR Client sent AUTH, but no password is set。Caused by: io.lettuce.core.RedisCommandExecutionException…

面试经典150题【71-80】

文章目录 面试经典150题【71-80】112.路径总和129.求根节点到叶子节点的数字之和124.二叉树中的最大路径和&#xff08;要思考&#xff09;173.二叉树迭代搜索器222.完全二叉树节点的个数236.二叉树的最近公共祖先199.二叉树的右视图637.二叉树的层平均值102.二叉树的层序遍历1…

9、组合模式(结构性模式)

组合模式又叫部分整体模式&#xff0c;它创建了对象组的树形结构&#xff0c;将对象组合成树状结构&#xff0c;以一致的方式处理叶子对象以及组合对象&#xff0c;不以层次高低定义类&#xff0c;都是结点类 一、传统组合模式 举例&#xff0c;大学、学院、系&#xff0c;它们…

guava的使用

对数组操作前判断是否会越界&#xff1a; List<String> s new ArrayList<>();System.out.println(Preconditions.checkElementIndex(2,s.size(),"下标长度超过了")); 是否为空 String s null;System.out.println(Preconditions.checkNotNull(s)); 判空…

设计模式学习系列 -- 随记

文章目录 前言 一、设计模式是什么&#xff1f; 二、设计模式的历史 三、为什么以及如何学习设计模式&#xff1f; 四、关于模式的争议 一种针对不完善编程语言的蹩脚解决方案 低效的解决方案 不当使用 五、设计模式分类 总结 前言 最近可能工作生活上的稳定慢慢感觉自己丢失…

小米公司研发岗的年终奖。。

小米 好的公司有年终且在年前发放&#xff0c;一般的公司有&#xff08;可能打折的&#xff09;年终且年后分批发放&#xff0c;不好的公司各有操作。 3 月已来&#xff0c;小米的年终也开始热议起来。 最近&#xff0c;一则「传小米年终打折&#xff0c;14薪能保住吗」冲上热搜…