Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. public static void main(String[] args) {
  2. //Tworzymy skaner
  3. Scanner sc = new Scanner(System.in);
  4.  
  5. //Pobieramy liczbę (wszędzie używam "byte", ponieważ tak było w zadaniu)
  6. byte liczba = sc.nextByte();
  7.  
  8. //Szukam największej potęgi liczby - nie trzeba byłoby tego robić, gdybyśmy musieli wypisywać liczby "od najmniejszej"
  9. byte najwiekszaPotega = najwiekszyWykladnikPotegi(liczba);
  10.  
  11. //Ponieważ wypisujemy potęgi od największej, to po każdej pętli zmniejszamy jej wartość.
  12. //Najmniejszą potęgą jest oczywiście 0 (bo 2 do potęgi 0 to jedność - ujemnych liczb nie bierzemy pod uwagę)
  13. for(int obecnaPotega = najwiekszaPotega; obecnaPotega >= 0; obecnaPotega--){
  14. //Liczba do odjęcia to 2 do potęgi obecnaPotega. Można to zapisać jako 1 << obecnaPotega.
  15. //Przykład: jeżeli obecnaPotega = 2 to liczbaDoOdjecia = (1 << 2) = 2 do potęgi 2 = 4.
  16. int liczbaDoOdjecia = 1 << obecnaPotega;
  17.  
  18. //Jeżeli liczbaDoOdjecia "mieści się" w liczbie, to odejmujemy ją i wypisujemy na ekran.
  19. //Oczywiście "<=" oznacza "mniejsza bądź równa"
  20. if(liczbaDoOdjecia <= liczba){
  21. liczba -= liczbaDoOdjecia; //Odejmujemy
  22. System.out.println(liczbaDoOdjecia); //Wypisujemy na ekran
  23. } else
  24. System.out.println(0); //Liczba nie zmieściła się - zgodnie z poleceniem piszemy więc 0.
  25. }
  26.  
  27. sc.close(); //Taka tam magiczna linijka - na razie nie musisz się tym przejmować:)
  28. }
  29.  
  30. private static byte najwiekszyWykladnikPotegi(byte zJakiejLiczby){
  31. byte wynik = 0;
  32. while((byte) (zJakiejLiczby >> 1) > 0) //"Ucinamy" kolejne bity, dopóki jakieś zostały (czyli liczba jest większa od 0)
  33. wynik++; //Za każdym uciętym bitem, zwiększamy wartość licznika.
  34.  
  35. //Wynik to liczba uciętych bitów.
  36. //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
  37. return wynik;
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement