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;
}


posted on 2016-07-26 23:50  海岛Blog  阅读(71)  评论(0编辑  收藏  举报

导航