代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n , p[20] , l = 0;
cin >> n;
if ( n % 2 == 1 || n == 0 ) //如果这个数不存在优秀的拆分
{
cout << -1 ; //输出-1
return 0; //提前结束
}
while ( n > 0 ) //十进制转化为二进制(模拟短除法)
{
p[l] = n % 2;
l++;
n /= 2;
}
for ( int i = l - 1 ; i > 0 ; i-- ) //倒序循环
{
if ( p[i] ) //如果有二进制位上有值
printf ("%d " , (int)pow(2 , i)); //输出对应的十进制值
}
return 0;
}