Silnia zly wynik

0

hej mam problem z silnia javie!

import java.util.Scanner;

public class Silnia {

	
	public static void main(String[] args) {
		
		System.out.println("Podaj liczbe z której chcesz obliczyć silnie");
	      int silnia;
	      Scanner odczyt = new Scanner(System.in);
	      silnia = odczyt.nextInt();
	      int i;
	      for (i=1;i<silnia;i++){
	    	  silnia= silnia*i;
	    	  System.out.println(silnia);
	    	  
	      }
	    

	}

}

niby wszystko gites ale po wpisaniu 5 powinno wyjsc 120 a nie :

5
10
30
120
600
3600
25200
201600
1814400
18144000
199584000
-1899959296

czemu tak, gdzie popełniłem blad?

0

Masz zapewne overflow w operacji.

0

czyli ?:D

0

zamiast zmiennej silnia mnóż jakąś inną, która przed pętlą będzie miała wartość 1, bo teraz wygląda to tak, że zaczynasz o 5 pomnożonego przez 2, potem wynik przez 3 itd

0

@Sopelek zrobilem jak mowiles i dalej nic

0

Patryk27:
Źle. Nie chodzi tutaj o przepełnienie, bo autor liczy silnię z 5. 5! = 120, nawet bajt to zmieści.

Kod jest taki:

              silnia = odczyt.nextInt();
              int i;
              for (i=1;i<silnia;i++){
                      silnia= silnia*i;
                      System.out.println(silnia);
 
              }

Problem jest taki, że zmienna silnia zmienia się w każdej interacji, a warunek i<silnia zależy od tej zmiennej.

0

Podeśle mi ktoś pętle do tego programu?
bo robie i albo wyswietla mi sie tak jak wczesniej albo wyswietla jakies liczby i w przypadku 5! wyswietla jakies liczby i konczy na 120

0
import java.util.Scanner;
 
public class Silnia {
        public static void main(String[] args) {
              System.out.println("Podaj liczbe z której chcesz obliczyć silnie");
              int silnia, i, j = 1;
              Scanner odczyt = new Scanner(System.in);
              silnia = odczyt.nextInt();
              for (i=1;i<=silnia;i++){
                      j*=i;
                      System.out.println(j);
              }
        }
}
0

Czyli tak jak u mnie

Podaj liczbe z której chcesz obliczyć silnie
5
1
2
6
24
120

a nie da sie tak zrobic by tylko 120 wyswietlało?

0

to przenieś wyświetlanie poza pętle...

1
Siema Java napisał(a):

a nie da sie tak zrobic by tylko 120 wyswietlało?
Może od razu podasz adres wykładowcy gdzie mamy wysyłać gotowe rozwiązania za ciebie.

0
 int n = odczyt.nextInt();
int silnia = 1;
              int i;
              for (i=1;i<n;i++){
                      silnia= silnia*i;
                      System.out.println(silnia);
 
              }

jak chcesz, żeby wypisało tylko wynik to przenieś println poza pętle

1 użytkowników online, w tym zalogowanych: 0, gości: 1