AcWing刷题日记——801. 二进制中1的个数

简介: AcWing 801. 二进制中1的个数

题目描述

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

输入格式

第一行包含整数 n

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

输出格式

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

数据范围

1n100000,

010^9

大体思路

题目上描述要得到数列中每个数中二进制1的个数,那什么可以得到二进制中的1的个数呢?lowbit,我们可以使用lowbit得到数中的最后一个1的位置,然后让原数减去得到的这个二进制,在使用lowbit得到下一个1的位置,在减去,知道这个数的二进制中没有1位置,就是这个数位0,就开始找下一个数,那实现一下代码:

#include<iostream>usingnamespacestd;
intn;
//得到数中最后一位1intlowbit(inta)
{
returna& (-a);
}
intmain()
{
cin>>n;
ints=0;
intx=0;
while (n--)
    {   
cin>>x;
s=0;
while (x)//当x减成0的跳出循环        {
x-=lowbit(x);//每次都减去自身二进制位中的最后一位1s++;//减去一位1的同时s++        }
cout<<s<<" ";
    }
return0;
}
相关文章
【LeetCode-每日一题】-67. 二进制求和
【LeetCode-每日一题】-67. 二进制求和
|
6月前
【一刷《剑指Offer》】面试题 10:二进制中 1 的个数
【一刷《剑指Offer》】面试题 10:二进制中 1 的个数
|
6月前
【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数
【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数
|
6月前
|
存储 Java
剑指Offer LeetCode 面试题15. 二进制中1的个数
剑指Offer LeetCode 面试题15. 二进制中1的个数
48 0
|
6月前
剑指Offer LeetCode 面试题17. 打印从1到最大的n位数
剑指Offer LeetCode 面试题17. 打印从1到最大的n位数
36 0
|
人工智能
《蓝桥杯每日一题》 前缀和·Acwing 3956. 截断数组
《蓝桥杯每日一题》 前缀和·Acwing 3956. 截断数组
68 0
|
机器学习/深度学习 Cloud Native
【刷题日记】67. 二进制求和
本次刷题日记的第 15 篇,力扣题为:67. 二进制求和 ,简单
|
Python Cloud Native
【刷题日记】415. 字符串相加
本次刷题日记的第 48 篇,力扣题为:415. 字符串相加 ,简单
|
Cloud Native
【刷题日记】504. 七进制数
本次刷题日记的第 3 篇,力扣题为:【刷题日记】504. 七进制数 ,简单
|
前端开发 C语言 Cloud Native
【刷题日记】2. 两数相加
本次刷题日记的第 6 篇,力扣题为:2. 两数相加 ,中等