问题链接: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(' '); } 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(' '); } return 0; }