lowbit函数
inline int lowbit(int x)
{
return x & -x;
}
lowbit函数,可以快速的取出一个数(二进制形式)的最低位1,不断使用lowbit()就可以很快地把一个数拆分成2^i的形式~,因为要求从大到小,所以输出前排序一下就可以啦
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 32;
inline int lowbit(int x)
{
return x & -x;
}
bool cmp(const int a, const int b)
{
return a > b;
}
int num[N];
int main()
{
int n,cnt = 0;
cin >> n;
if(n % 2 != 0 || n == 0)
{
printf("%d\n",-1);
return 0;
}
for(int i = n; i; i-=lowbit(i)) num[cnt++] = lowbit(i);
sort(num,num+cnt,cmp);
for(int i = 0; i < cnt; i++) printf("%d ", num[i]);
printf("\n");
}