企业网站建设方案案例,用html制作的蛋糕店网站,网站服务器服务商,南京的网站建设文章目录 题目描述基本思路实现代码 题目描述
给定一个长度为n的数列#xff0c;请你求出数列中每个数的二进制表示中1的个数。
输入格式
第一行包含整数n。第二行包含n个整数#xff0c;表示整个数列。
输出格式
共一行#xff0c;包含n个整数#xff0c;其中的第i个… 文章目录 题目描述基本思路实现代码 题目描述
给定一个长度为n的数列请你求出数列中每个数的二进制表示中1的个数。
输入格式
第一行包含整数n。第二行包含n个整数表示整个数列。
输出格式
共一行包含n个整数其中的第i个数表示数列中的第i个数的二进制表示中1的个数。
数据范围
1 ≤ n ≤ 100000,0 ≤ 数列中元素的值 ≤ 10^9
基本思路
这道题是一道典型的位运算的题目。一种常用的位运算是lowbit运算即找出一个二进制数中最低位的1及其后面所有的0。例如对于整数10其二进制表示为1010对该数字使用lowbit操作得到的结果即1010中最后的一个1及其跟着的0即10。lowbit操作的具体过程即将原始数字与该数字的补码进行按位与运算。每次将当前数字的lowbit结果从该数字中减去相当于将原始数字中最后一位1修改为0。重复这个过程到最后即可将原始数字中所有的1都修改为0操作的次数即该二进制数中1的个数。
实现代码
#include cstdioconst int N 100010;
int arr[N];int count_of_one(int n)
{int result 0;while(n ! 0){n - n (-n);result ;}return result;
}int main(void)
{int n;scanf(%d, n);for(int i 0; i n; i) scanf(%d, arr[i]);for(int i 0; i n; i) printf(%d , count_of_one(arr[i]));return 0;
}