package silniawielewatki;

import java.util.Scanner;

/**
 * @author Osama
 */
class Wyniki {
    protected static double[] w = new double[2];
    public Wyniki() {
        w[0]=1;
        w[1]=1;
    }
    public double Podaj() {
        return w[0]*w[1];
    }
}
class WatekSilni extends Thread {
    private long zakres0=0;
    private long zakres=0;
    private double wynik=1;
    private Wyniki koniec;
    private int n;
    public WatekSilni (long zakres0, long zakres, int n){
        this.zakres0=zakres0;
        this.zakres=zakres;
        this.n=n;
    }
    public void run() {
        for (long i=zakres0; i<=zakres; i++) {
            wynik=wynik*i;
            System.out.println(Thread.currentThread().getName()+" - "+wynik);
        }
        System.out.println("Koniec "+Thread.currentThread().getName());
        koniec.w[n]=wynik;
    }
}
public class SilniaWieleWatki {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("Program oblicza silnię.");
        System.out.println("Podaj liczbę: ");
        String liczba;
        Scanner odczyt = new Scanner(System.in);
        liczba = odczyt.nextLine();
        long n = Integer.parseInt(liczba);
        Wyniki tablica = new Wyniki();
        Thread silnia1 = new WatekSilni(1,(long) Math.round(n/2), 0);
        Thread silnia2 = new WatekSilni( (long)Math.round(n/2) + 1,(long)n, 1);
        silnia2.start();
        silnia1.start();
        silnia2.join();
        silnia1.join();
        System.out.println(n+"! = "+tablica.Podaj());
        System.out.println("Koniec programu");
    }
    
}
