判断该位在二进制中是否为一,然后反向输出即可。
#include <bits/stdc++.h>
using namespace std ;
const int N = 1e5 + 5 ;
int p[N] ;
int main ( ) {
int n ;
cin >> n ;
if ( n & 1 ) { cout << -1 ; return 0 ; }
int cnt = 0 ;
int u = 1 ;
while ( n ) {
if ( n & 1 ) p[++ cnt] = u ;
n >>= 1 ;
u *= 2 ;
}
for ( int i = cnt ; i >= 1 ; i -- ) cout << p[i] << ' ' ;
return 0 ;
}