Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void main(String[] args) {
- //Tworzymy skaner
- Scanner sc = new Scanner(System.in);
- //Pobieramy liczbę (wszędzie używam "byte", ponieważ tak było w zadaniu)
- byte liczba = sc.nextByte();
- //Szukam największej potęgi liczby - nie trzeba byłoby tego robić, gdybyśmy musieli wypisywać liczby "od najmniejszej"
- byte najwiekszaPotega = najwiekszyWykladnikPotegi(liczba);
- //Ponieważ wypisujemy potęgi od największej, to po każdej pętli zmniejszamy jej wartość.
- //Najmniejszą potęgą jest oczywiście 0 (bo 2 do potęgi 0 to jedność - ujemnych liczb nie bierzemy pod uwagę)
- for(int obecnaPotega = najwiekszaPotega; obecnaPotega >= 0; obecnaPotega--){
- //Liczba do odjęcia to 2 do potęgi obecnaPotega. Można to zapisać jako 1 << obecnaPotega.
- //Przykład: jeżeli obecnaPotega = 2 to liczbaDoOdjecia = (1 << 2) = 2 do potęgi 2 = 4.
- int liczbaDoOdjecia = 1 << obecnaPotega;
- //Jeżeli liczbaDoOdjecia "mieści się" w liczbie, to odejmujemy ją i wypisujemy na ekran.
- //Oczywiście "<=" oznacza "mniejsza bądź równa"
- if(liczbaDoOdjecia <= liczba){
- liczba -= liczbaDoOdjecia; //Odejmujemy
- System.out.println(liczbaDoOdjecia); //Wypisujemy na ekran
- } else
- System.out.println(0); //Liczba nie zmieściła się - zgodnie z poleceniem piszemy więc 0.
- }
- sc.close(); //Taka tam magiczna linijka - na razie nie musisz się tym przejmować:)
- }
- private static byte najwiekszyWykladnikPotegi(byte zJakiejLiczby){
- byte wynik = 0;
- while((byte) (zJakiejLiczby >> 1) > 0) //"Ucinamy" kolejne bity, dopóki jakieś zostały (czyli liczba jest większa od 0)
- wynik++; //Za każdym uciętym bitem, zwiększamy wartość licznika.
- //Wynik to liczba uciętych bitów.
- //Innymi słowy: gdybyś przesunął liczbę 1 o tą liczbę bitów, to otrzymałbyś największą liczbę, która "zmieści się" w liczbie zJakiejLiczby
- return wynik;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement