题目大意:
输入:
第一个数d,是测试组数;
然后,每行输入一个n,要输入d个n
输出:
对于每行的数n,将n转为二进制数,然后输出其转化的二进制数中“1”的位置(注意:最低位是从0开始),用空格隔开
如:13 -> 1101 所以对应的1的位置位:0 2 3
实现程序:AC
#include <iostream>
using namespace std;
int main()
{
int i, n, m, d;
cin >> d;
while (d--) {
int first = 0; // 标志是否是第一个1
cin >> n;
for (i = 0; n != 0; i++) {
m = n % 2; // 取转化的二进制数的各个位置的数字
n = n / 2;
if (m == 1) {
if (first == 0) { // 输出第一个1的位置,不用空格
cout << i;
first = 1;
}
else // 输出有1的其它位置,要空格
cout << " " << i;
}
}
cout << endl;
}
return 0;
}
运行结果: