Răspuns:
#include <bits/stdc++.h>
using namespace std;
int n , put2[105] , k;
int main()
{
int i;
cin >> n;
while(n > 0)
{
for(i = 0 ; ( 1LL * 1 << i ) <= n ; i++) ; ///repeta instructiunea pana cand 2^i>n
i--; ///2^i va ajunge sa fie mai mare ca n,
///ca sa nu-l depasesc pe n ca suma de puteri ale lui 2, scad -1 din exponent
///retin in acest vector sumele de puteri ale lui 2
++k;
put2[k] = ( 1 << i);
n -= ( 1 << i); ///ca sa pot sa determin urmatorul element care ma va ajuta
}
for(int i = k ; i >= 1 ; i--)
cout << put2[i] << " ";
return 0;
}
Explicație: