总时间限制:
1000ms
内存限制:
65536kB
描述
给定一个十进制整数N,求其对应2进制数中1的个数
输入
第一个整数表示有N组测试数据,其后N行是对应的测试数据,每行为一个整数。
输出
N行,每行输出对应一个输入。
样例输入
4
2
100
1000
66
样例输出
1
3
6
2
问题链接:Bailian3708 1的个数
问题分析:这是一个十进制数转换为二进制数的问题,使用取余数运算可以将个位数逐个取出。
程序说明:(略)
题记:公共的功能封装到函数中,可以重复使用。
离线打表输出(数组one[])程序如下:
#include <iostream>
using namespace std;
int getdigit1(int n)
{
int cnt = 0;
while(n) {
if(n & 1)
cnt++;
n >>= 1;
}
return cnt;
}
int main()
{
printf("int one[] = {");
for(int i = 0; i <=255; i++) {
printf("%d, ", getdigit1(i));
if(i % 38 == 0)
printf("\n");
}
printf("};");
return 0;
}
AC的C语言程序如下:
/* Bailian3708 1的个数 */
#include <stdio.h>
int one[] = {0,
1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4,
3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3,
4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2,
2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3,
4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5,
3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4,
5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4,
4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3,
4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5,
4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6,
7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5,
5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4,
5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8,
};
int main(void)
{
int n, a;
unsigned char *p;
scanf("%d", &n);
while(n--) {
scanf("%d", &a);
p = (unsigned char *)&a;
printf("%d\n", one[*p]+one[*(p+1)]+one[*(p+2)]+one[*(p+3)]);
}
return 0;
}
AC的C语言程序如下:
/* Bailian3708 1的个数 */
#include <stdio.h>
int getdigit1(int n)
{
int cnt = 0;
while(n) {
if(n & 1)
cnt++;
n >>= 1;
}
return cnt;
}
int main(void)
{
int n, a;
scanf("%d", &n);
while(n--) {
scanf("%d", &a);
printf("%d\n", getdigit1(a));
}
return 0;
}
AC的C语言程序如下:
/* Bailian3708 1的个数 */
#include <stdio.h>
#define BASE 2
#define ONE 1
int count_digit(int n, int digit)
{
int count;
count = 0;
while(n) {
if(n % BASE == digit)
count++;
n /= BASE;
}
return count;
}
int main(void)
{
int n, a;
scanf("%d", &n);
while(n--) {
scanf("%d", &a);
printf("%d\n", count_digit(a, ONE));
}
return 0;
}