suma potęg dwójki
Napisz program, który liczbę mniejszą od 256 zapisze jako sumę potęg liczby 2. Liczbę wprowadzamy z klawiatury. W programie zdefiniuj tablicę o wartościach: 128, 64, 32, 16, 8, 4, 2.
prosze o pomoc <33
suma potęg dwójki
Napisz program, który liczbę mniejszą od 256 zapisze jako sumę potęg liczby 2. Liczbę wprowadzamy z klawiatury. W programie zdefiniuj tablicę o wartościach: 128, 64, 32, 16, 8, 4, 2.
prosze o pomoc <33
Po treści to ten temat pasuje bardziej do drobnych ogłoszeń za $.
@ledi12: frytki do tego, juz mam
Prosisz o pomoc z czym konkretnie? Całość jest trywialna do zrobienia, możesz po prostu używać bitowego and (&
) aby sprawdzić wartości poszczególnych bitów, które oznaczają, czy dana potęga 2 jest elementem sumy.
#include <iostream>
using namespace std;
int main() {
const int tablicaLength = 8;
int tablica[tablicaLength] = {128, 64, 32, 16, 8, 4, 2, 1};
int LiczbaMniejszaOd256;
cin >> LiczbaMniejszaOd256;
cout << LiczbaMniejszaOd256 << " = ";
for (int i = 0; i < tablicaLength; i++)
{
if (LiczbaMniejszaOd256 / tablica[i] > 0)
{
LiczbaMniejszaOd256 -= tablica[i];
cout << tablica[i];
if (LiczbaMniejszaOd256 > 0)
{
cout << " + ";
}
}
}
return 0;
}
Teraz skoro ja napisałem, poczekaj aż @_13th_Dragon napisze ulepszoną wersję :)
Jeszcze rozwiązanie według sugestii @kq
https://ideone.com/QJb63I
#include <iostream>
using namespace std;
int main() {
const int tablicaLength = 8;
int tablica[tablicaLength] = {128, 64, 32, 16, 8, 4, 2, 1};
int LiczbaMniejszaOd256;
cin >> LiczbaMniejszaOd256;
cout << LiczbaMniejszaOd256 << " to suma liczb: ";
for (int i = 0; i < tablicaLength; i++)
{
if ((LiczbaMniejszaOd256 & tablica[i]) > 0)
{
cout << tablica[i] << " ";
}
}
return 0;
}
#include <stdio.h>
int main() {
int x;
printf("Podaj liczbe: ");
scanf("%d", &x);
for (int i = 128; i >= 1; i = i >> 1) {
printf((x & i) > 0? "1" : "0");
}
}
Tylko to jest bez sprawdzania błędów (w przypadku gdyby użytkownik wpisał jakieś głupoty).
for (int i = 128; i >= 1; i = i >> 1) {
printf((x & i) > 0? "1" : "0");
}
Tutaj iteruję w dziwny sposób, bo zmienna i
przyjmie wartości 128, 64, 32, 16, 8, 4, 2, 1 (ponieważ zamiast ++
czy --
, to dokonuję przesunięcia bitowego po każdej iteracji: i = i >> 1
).
A potem sprawdzam za pomocą operacji bitowej AND, czy jest zapalony dany bit: (x & i) > 0
(ponieważ potęgi dwójki 128, 64, 32, 16... można potraktować jako maski bitowe, w których świeci się tylko jeden bit będący daną potęgą dwójki), jeśli jest zapalony, to wyświetlam stringa "1", jeśli zgaszony, to wyświetlam stringa "0".
Spine napisał(a):
Teraz skoro ja napisałem, poczekaj aż @_13th_Dragon napisze ulepszoną wersję :)
A proszę:
#include <iostream>
using namespace std;
int main()
{
int value;
cin>>value;
for(int mask=128;mask;mask>>=1) if(value&mask) cout<<mask<<" ";
return 0;
}
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.