兰州网站建设优化网站搭建免费软件
题目
给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。
输入格式
第一行包含整数 n。
第二行包含 n 个整数,表示整个数列。
输出格式 共一行,包含 n 个整数,其中的第 个数表示数列中的第 i 个数的二进制表示中 1 的个数。
数据范围
1≤n≤100000
0≤数列中元素的值≤109
输入样例:
5
1 2 3 4 5
输出样例:
1 1 2 1 2
来源:acwing算法基础 801. 二进制中1的个数
纯代码
#include<bits/stdc++.h>
using namespace std;const int N = 1e5 + 1;
int a[N];int i_t (int a)
{int sum = 0;while (a != 0){ sum += a % 2;a /= 2;} return sum;
}
int main()
{int n;cin >> n;for (int i = 0; i < n; i ++) {scanf ("%d", &a[i]);cout << i_t (a[i]) << " ";}return 0;
}
题解(带注释)
#include<bits/stdc++.h> // 包含常用的头文件,如iostream、vector、algorithm等
using namespace std;const int N = 1e5 + 1; // 定义常量N,表示数组的最大大小
int a[N]; // 定义一个大小为N的数组a,用于存储输入的数据// 函数i_t:计算整数a的二进制表示中1的个数
int i_t(int a)
{int sum = 0; // 初始化计数器sum,用于记录1的个数while (a != 0) // 当a不为0时,继续循环{ sum += a % 2; // 取a的最低位(0或1),并加到sum中a /= 2; // 将a右移一位,相当于去掉最低位} return sum; // 返回1的个数
}int main()
{int n; // 定义变量n,表示输入数据的个数cin >> n; // 输入n的值// 循环读取n个整数,并计算每个整数的二进制表示中1的个数for (int i = 0; i < n; i++) {scanf("%d", &a[i]); // 读取第i个整数并存储到数组a中cout << i_t(a[i]) << " "; // 调用i_t函数计算1的个数,并输出结果}return 0; // 程序正常结束
}