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号
浙公网安备 33010602011771号