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.
 

Gucky

Top Contributor
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.
 

T-Pain

Mitglied
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...
 

Gucky

Top Contributor
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.
 

T-Pain

Mitglied
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...
 

Tobse

Top Contributor
Jetz denk mal scharf nach, wie liese sich denn ein
Code:
break
mit einem
Code:
if
kombinieren?
 

Tobse

Top Contributor
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.
 

Neue Themen


Oben