首页 > 编程语言 >通关基本算法 day_08 -- 位运算

通关基本算法 day_08 -- 位运算

时间:2022-09-27 15:26:20浏览次数:78  
标签:... 数列 二进制 -- lowbit 08 个数 int day

求 整数 n 二进制表示里,第 k 位数字是几?

$$
n = 15 = (1111)_2
$$

  1. 先把第 k 位移到最后一位 n >> k
  2. 看个位是几 x&1
  3. 总结:n >> k&1

例子

例如输出 10 的二进制表达

#include<iostream>

int main()
{
	int n = 10;
	for(int k = 3;k >= 0;k--)
	{
		cout << (n >> k)&1;
	}
    return 0;
}

lowbit(x) 作用:返回 x 的最后一位 1

例如 x = 1010,lowbit(x) = 10

x = 101000,lowbit(x) = 1000

x & (-x) = x & (~x+1)

x = 1010...100...0

~x=0101...011...1

~x+1=0101...100...0

x & (~x+1) = 0....010....0

可以利用 lowbit 返回 x 二进制 1 的个数

原理:每一次把最后一位1减掉,当x = 0的时候,里面就没有1了,减了多少次就是有多少个1

模板

求n的第k位数字: n >> k & 1
返回n的最后一位1:lowbit(n) = n & -n

练习

801. 二进制中1的个数 - AcWing题库

给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。

输入格式

第一行包含整数 n。

第二行包含 n 个整数,表示整个数列。

输出格式

共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。

数据范围

1≤n≤100000
0≤数列中元素的值≤109

输入样例:

5
1 2 3 4 5

输出样例:

1 1 2 1 2
#include<iostream>
using namespace std;

int lowbit(int x)
{
    return x & -x;
}

int main()
{
    int n;
    cin >> n;
    while(n--)
    {
        int x;
        cin >> x;
        
        int res = 0;
        while(x)
        {
            x -= lowbit(x);
            res++;
        } 
        cout << res << endl;
    }
    
}

标签:...,数列,二进制,--,lowbit,08,个数,int,day
From: https://www.cnblogs.com/ShibuyaKanon/p/16734648.html

相关文章

  • ansible 安装jdk
    1、上传文件到ansible端上/data/jdk/jdk-8u341-linux-x64.tar.gz(下载地址:)2、编辑jdk.yml文件vimjdk.yml【----hosts:192.168.59.103 remote_user:root tasks......
  • flask-多app应用
    flask多app应用1、安装werkzeugpip3installwerkzeug==0.16.02、实例fromwerkzeug.wsgiimportDispatcherMiddlewarefromwerkzeug.servingimportrun_simple......
  • 考察交互的方差分析与简单效应分析(附带操作数据)
    1.案例背景与分析策略1.1案例背景介绍治疗缺铁性贫血病人12例,分4组给予基础疗法和甲乙两种药物治疗,一个月后观察红细胞增加数(百万/mm),试分析甲乙用药对治疗效果的影响。......
  • 小程序接口请求的初次封装
    我们在写微信小程序中不管是用原生的微信开发者工具还是用uniapp来开发都需要用到数据的请求,在页面中大量的使用请求无疑会造成代码的冗余,也会给后期的维护带来很大的难......
  • 1:python3环境搭建和PyCharm配置
    python官网----https://www.python.org/1.查看历史版本2。下载指定的历史版本.   3.安装python  4.安装到指定目录(先创建一个python3的目录)  5修改......
  • 聚合函数
    聚合函数:将一列数据作为一个整体进行纵向计算count计算个数一般选择非空的列主键count(*)max计算最大值 min计算最小值sum计算和......
  • SC200L Android10启动和关机修改
    SC200L默认的PowerKey连接方式根据原理图可知,低电有效,查询代码,默认低电6S以上触发开机或关机菜单由于项目硬件设计,需改为高电平启动,低电平时无需手动确认,直接关机。因此......
  • jQuery中发起 ajax 请求,自己封装get请求
    jQuery中发起ajax请求参数:1.请求地址   2.参数  3.回调函数(参数为响应数据)//get请求参数拼接到url中$.get("http//127.0.0.1:8000",{a:100,b:200},......
  • 灰色预测模型案例分析
    在实际生活中,常常要根据现有的经验或者数据做出预测。比如,预测账号粉丝量,年度销售额等等。研究时间序列的主要目的之一就是进行预测。本篇案例讲述用灰色预测模型如何预测......
  • pip 离线安装 gdal 更改为清华源
    condaactivatefirst激活虚拟环境first。python-V查看python版本。https://www.lfd.uci.edu/~gohlke/pythonlibs/下载与python版本匹配的whl包。虚拟环境......