Witam, mam następujący ciąg liczb:
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 ... 262144
Ogólnie 2^n gdzie n zawiera się w przedziale 0 - 18
Weźmy teraz dowolne liczby z tego przedziału np. 2, 8, 128, 512
Dodajmy je: 2+8+128+512 = 650
Moim zadaniem jest napisanie programu który po podaniu mu tej liczby tj. 650
zwróci mi z jakich liczb została ona stworzona tzn. zwróci mi: 512, 128, 8, 2
Na samym początku wyznaczam największą możliwą do uzyskania liczbę w naszym przypadku to będzie 512 bo 1024 jest już większe niż 650.
Sprawdzam ją w taki sposób:
int liczba;
int max_ilosc_wartosci_w_ciagu = 18;
cout << "Podaj liczbe: ";
cin >> liczba;
cout << endl << "Z tych liczb mozesz utworzyc: " << liczba << endl;
for (int i=max_ilosc_wartosci_w_ciagu; i>=0; i--){
if ((liczba-(1<<i)) > 0){
cout << (1<<i)<< endl;
}
}
I na tym moje pomysły się kończą.