1.题目
二 进 制 数
给出一个正整数 n,打印出它的二进制中所有 1 的位置。二进制中最低位的位置是 0.
举例
正整数 13 的二进制(1101)中 1 的位置是 0,2,3。
任务
编写一个程序来处理每个数据:
先读入一个正整数 n,再计算这个正整数的二进制中 1 的位置,打印结果。
2.输入描述
输入数据的第一行是一个正整数 d,表示这个数据集中正整数的个数,1≤d ≤10。数据集列在 d 的下面。每个数据集由一个整数 n(1≤n≤1000000)组成,且放在一行上。
3.输出描述
输出应当有 d 行,一行是一个数据集处理的结果。
第 i 行,1≤i≤d,应当包含该数据的二进制的 1 的位置,位置是按递增顺序排列,中间用一个空格隔开。
4.输入样例
1
13
5.输出样例
0 2 3
#include<iostream>
#include<vector>
using namespace std;
vector<int> convert(int n)
{
vector<int> myvector;
while( n != 0)
{
myvector.push_back(n%2);
n = n/2;
}
return myvector;
}
int main()
{
int t;
cin>>t;
for(int k = 0;k<t;k++)
{
int n;
int i;
int a;
cin>>n;
vector<int> myvector;
myvector = convert(n);
//输出第一个
for(i = 0;i<myvector.size(); i++)
{
if(myvector[i] == 1)
{
a = i;
cout<<i;
break;
}
}
//输出剩余的
for(i = a+1;i<myvector.size();i++)
{
if(myvector[i] ==1 )
{
cout<<" "<<i;
}
}
cout<<endl;
}
return 0;
}