HDU1390 ZOJ1383 Binary Numbers
问题链接:HDU1390 ZOJ1383 Binary Numbers。入门练习题,用C语言编写程序。
对输入的整数的各个二进制位进行判断,如果为1则输出其所在的位(从右边开始分别是0,1,2,3,...位),结果是一个集合,从小到大输出集合的各个元素。
这里给出两个程序,一个是计算出结果放入数组中再行输出,另外一个是一边计算一边输出。
AC的C语言程序(正解)如下:
/* HDU1390 ZOJ1383 Binary Numbers */
#include <stdio.h>
int main(void)
{
int t, n, element, ecount;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
// 计算集合并且输出结果
ecount = 0;
element = 0;
while(n) {
if(n & 1) {
ecount++;
if(ecount == 1)
printf("%d", element);
else
printf(" %d", element);
}
element++;
n >>= 1;
}
putchar('\n');
}
return 0;
}另外一个AC的C语言程序如下:
/* HDU1390 Binary Numbers */
#include <stdio.h>
int main(void)
{
int t, n, ans[64], count, element, i;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
// 计算集合
count = 0;
element = 0;
while(n) {
if(n & 1)
ans[count++] = element;
element++;
n >>= 1;
}
// 输出结果
for(i=0; i<count; i++) {
if(i != 0)
putchar(' ');
printf("%d", ans[i]);
}
putchar('\n');
}
return 0;
}
浙公网安备 33010602011771号