星澈是信息技术学院中一位非常普通的学子,他除了脸盲外,还有一个缺点,就是他的数学非常差,简直就是一个“数学黑洞”,一天,他又被一道非常简单的题目难住了,这道题是这样的:“将一个十进制数转为二进制,并计算出二进制数中有多少个数字1”,你能帮帮他吗?
输入要求
第一行输入一个整数T(1<=T<=100),表示接下来有T组数据
每组数据包含一个N,代表需要计算的数字。(N<=100,000)
输出要求
对于每个测试样例,输出两行,第一行为转换后的2进制数,第二行为2进制数中1的个数。
测试数据
输入示例
3
6
66
666
输出示例
Case #1:
110
2
Case #2:
1000010
2
Case #3:
1010011010
5
T = int(input())
for i in range(T):
n = int(input())
n_bin = bin(a)[2:]
print(n_bin)
print(len(n_bin) - len(n_bin.replace('1', '')))
#include "stdio.h"
#include "string.h"
#define MAX 21
int cnt(char * s)
{
int n = 0;
while (*s != '\0')
{
if (*s == '1')
n++;
s++;
}
return n;
}
char* trim(char * s)
{
char *p = s;
while (*p == '\0') p++;
return p;
}
void conv(char arr[], int n)
{
char * p = &arr[MAX - 2];
if (n == 0) { *p = '0'; return; }
while (n)
{
*p = n % 2 + '0';
n /= 2;
p--;
}
}
int main()
{
char ans[100][MAX];
memset(ans, 0, 100 * MAX * sizeof(char));
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
int m;
scanf("%d", &m);
conv(ans[i], m);
}
for (int i = 0; i < n; i++)
{
printf("Case #%d:\n", i + 1);
printf("%s\n", trim(ans[i]));
printf("%d\n", cnt(trim(ans[i])));
}
return 0;
}