Maximale Fakultät kleiner n berechnen

T-Pain

Mitglied
Hallo,

ich möchte ein Programm schreiben, welches mir die größtmögliche Fakultät < n ausrechnet.
in anderen worten:

f(n) = max{k >= 1 | k! < n}

Bisher habe ich die Fakultät iterativ mit einer for-Schleife korrekt berechnet:


Java:
public class faktest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		long n = 10;
		long faku = 1;
	
		
		for(int i = 1; i<=n; i++)
        {
            faku *= i;

         if(faku<n)
        	 System.out.println(faku);
        }

	}

}



Wie kann ich das denn umschreiben, sodass die Fakultätsberechnung abbricht, sobald das Programm merkt, dass es größer wird als n und optimalerweise das letzte k! ausgibt, welches kleiner als n ist?

Bei mir wirft er ja alle k! in die Runde, aber ich möchte lediglich das größte haben.



Danke für eure Hilfe.
 
Teile die Fakultätsberechnung in eine Methode auf, die einen Wert zurückgibt. Wenn die Fakultät nach der Multiplikation größer ist, als n gibst du faku zurück. Ansonsten erst nach der Schleife.
 
wir sollen das ohne methoden machen;(

das was du sagst steht doch schon so in meinem programm drin?
ich erhalte ja das richtige ergebnis, aber ich möchte nur den letzten wert bekommen...
 
Ohne Methoden???!!!!!!!!!!! Was ist das denn für ein Lehrer/Prof? Und wie programmiert ihr? Mit Lochkarten?

Füge ein break; ein, wenn das if true ergibt und mach den SysOut hinter die Schleife.
 
Naja, Methoden kommen wohl später.

Wenn ich ein break einfüge, stoppt die schleife doch schon bei der ersten Berechnung weil wenn zum Beispiel n=4 ist, ist die erste Berechnung in der Fakultät 2 und somit die of Bedingung erfüllt. Und das wäre dann auch falsch, weil es nicht die größte Fakultät kleiner als n ist...
 
Jetz denk mal scharf nach, wie liese sich denn ein
Code:
break
mit einem
Code:
if
kombinieren?
 
Fast. Wenn du das so schreibst, wird die fakultät jeden durchlauf ausgegeben. Wenn du aber machst

Code:
while (...) {
    // ...
    if (faku > n) break;
}
Musst du
Code:
faku - 1
zurückgeben, weil
Code:
faku!
ja schon größer als
Code:
n
ist.
 

Zurück
Oben