Fakultät zurückrechnen

kingpin000

Mitglied
Hallo,
ich steh im Moment auf dem Schlauch bezüglich einem Problem mit Fakultäten und zwar: Wie ich aus einer Zahl dessen Fakultät berechne, weiß ich, aber ich würde gerne eine Zahl die aus einer Fakultät entstanden ist, wieder auf seinen Ursprungswert zurückrechnen.

Hat da jemand eine Idee?
 
Zuletzt bearbeitet von einem Moderator:
N

nillehammer

Gast
Da es bei Fakultät um Multiplikation geht, muss die Fakultät durch alle Multiplikatoren teilbar sein, die bei ihrer Berechnung beteiligt waren. Rechnet man die Fakultät rückwärts, muss 1.0 raus kommen. Geht das nicht, handelt es sich nicht um eine Fakultät von irgendwas. Das kann man sich zu nutze machen:
Java:
/**
  * Rechnet die Fakultät rückwärts und versucht, die Zahl
  * zu ermitteln, deren Fakultät als Parameter übergeben wurde.
  * @param factorial die eventuell fakultät
  * @return die zahl, deren Fakultät übergeben wurde, oder -1, wenn die Zahl keine
  *          Fakultät war.
  */
	static int reverseFactorial(final int factorial) {

		double divisionResult = factorial;

		int i = 1;

		do {
			i++;

			System.out.print(divisionResult + ":" + i + "=");

			divisionResult = divisionResult / i;

			System.out.println(divisionResult);

		} while (divisionResult > 1.0);

		return (divisionResult == 1.0) ? i : -1;
	}
 

Landei

Top Contributor
Wohl besser mit Ganzzahl-Arithmetik und early exit:

Java:
    public static int reverseFactorial(int factorial) {
        int i = 1;
        for(; i <= factorial; i++) {
            if (factorial % i != 0) {
                return - 1;
            }
            factorial /= i;
        }
        return i-1;
    }

Wobei man bei den paar Fakultät-Werten, die in [c]int[/c] passen, einfach ein Array mit den Werten ginge.
 

kingpin000

Mitglied
Da es bei Fakultät um Multiplikation geht, muss die Fakultät durch alle Multiplikatoren teilbar sein, die bei ihrer Berechnung beteiligt waren. Rechnet man die Fakultät rückwärts, muss 1.0 raus kommen. Geht das nicht, handelt es sich nicht um eine Fakultät von irgendwas. Das kann man sich zu nutze machen:
Java:
/**
  * Rechnet die Fakultät rückwärts und versucht, die Zahl
  * zu ermitteln, deren Fakultät als Parameter übergeben wurde.
  * @param factorial die eventuell fakultät
  * @return die zahl, deren Fakultät übergeben wurde, oder -1, wenn die Zahl keine
  *          Fakultät war.
  */
	static int reverseFactorial(final int factorial) {

		double divisionResult = factorial;

		int i = 1;

		do {
			i++;

			System.out.print(divisionResult + ":" + i + "=");

			divisionResult = divisionResult / i;

			System.out.println(divisionResult);

		} while (divisionResult > 1.0);

		return (divisionResult == 1.0) ? i : -1;
	}

ich hätte da mal eine Frage zur letzten Zeile. Welche Wirkung hat das "?" ?
 
T

trääät

Gast
also auch wenn man jetzt nicht weis dass das ding "ternär-operator" heißt ... so könnte man doch auf folgendes kommen :

das "?" ist ein operator ... und halt nun mal ein "fragezeichen" ...

also könnte man auch von selbst drauf kommen das man google einfach mal nach "java fragezeichen operator" fragt ... wenn man halt wie gesagt nicht weis dass das teil "ternär-operator" heißt ...
 
N

nillehammer

Gast
Landei hat gesagt.:
Wohl besser mit Ganzzahl-Arithmetik und early exit:
Dein Code ist besser als meiner :toll:
kingpin000 hat gesagt.:
ich hätte da mal eine Frage zur letzten Zeile. Welche Wirkung hat das "?" ?
Das ist -wie schon geschrieben- der Ternäroperator. Er ermöglicht die Auswahl eines der beiden Werte neben dem
Code:
:
abhängig von dem Ergebnis der Prüfung vor dem Fragezeichen. Es ist im Prinzip ein verkürztes if-else. Hättste aber echt auch selber googeln können ;)
 

All4Me

Mitglied
Ist es von der Performance nicht besser, die Fakultät per Multiplikation zu berechnen und abzubrechen, wenn der Wert gleich oder größer dals der Ausgangswert ist?

Meine Überlegung kommt daher, dass die Muktiplikation schneller als die Division ist.

Sowas in der Art:
Java:
static int reverseFactorial(final int factorial){
  int i = 1;
  int fac = 1;
  for(;fac<factorial;i++){
    fac *=i;
  }
  if(fac==factorial){
    return i;
  }else{
    return -1;
  }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L mit Fakultät mathematische Formel berechnen Java Basics - Anfänger-Themen 5
K Fakultät Java Basics - Anfänger-Themen 5
B Java Array Fakultät Function Java Basics - Anfänger-Themen 5
K Rekursive Methode für Fakultät mit BigInteger Java Basics - Anfänger-Themen 10
I Datentypen Warum so nur Fakultät nur bis 8? Java Basics - Anfänger-Themen 5
K Fakultät Java Basics - Anfänger-Themen 16
C Erste Schritte Negative Zahlen als Fakultät ablehnen Java Basics - Anfänger-Themen 2
P Problem bei Fakultät mit "for"-Schleife Java Basics - Anfänger-Themen 12
M Fakultät berechnen Java Basics - Anfänger-Themen 2
A Fakultät probleme Java Basics - Anfänger-Themen 1
Z Schleifen Beispiel: Fakultät Java Basics - Anfänger-Themen 26
P Fakultät aus Zahl bilden Java Basics - Anfänger-Themen 5
V Rekursion und Fakultät Java Basics - Anfänger-Themen 4
N Fakultät Java Basics - Anfänger-Themen 9
P Methoden Fakultät und Fehlerwert berechnen Java Basics - Anfänger-Themen 7
Fab1 Project Euler problem20 Fakultät von 100 Java Basics - Anfänger-Themen 13
S Erste Schritte Fakultät Quellcode Java Basics - Anfänger-Themen 12
L Fakultät Java Basics - Anfänger-Themen 2
G vielfache, fakultät und primzahltest Java Basics - Anfänger-Themen 35
M Fakultät Java Basics - Anfänger-Themen 13
J Fakultät- Programm programmieren Java Basics - Anfänger-Themen 10
W Fakultät, warum Endlosschleife? Java Basics - Anfänger-Themen 15
W Fakultät Java Basics - Anfänger-Themen 9
J Fakultät und Rekursion Java Basics - Anfänger-Themen 9
V Überlauf Fakultät Java Basics - Anfänger-Themen 4
L Fakultät Programm ! Java Basics - Anfänger-Themen 7
M Problem mit Berechnung der Fakultät Java Basics - Anfänger-Themen 3
B Berechnugn der Fakultät Java Basics - Anfänger-Themen 3
M Fakultät berechnen Java Basics - Anfänger-Themen 2
R Fakultät einer Zahl errechnen. Java Basics - Anfänger-Themen 7
M Brauche Hilfe mit Fakultät! Java Basics - Anfänger-Themen 16
N java befehl für fakultät Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben