# Anzahl maximaler Schritte bei Querprodukt von long



## soong (18. Nov 2014)

Hallo!

Ich bin Neuling in Java und habe folgende Aufgabenstellung bekommen:



> Für eine Zahl n erhält man deren Querprodukt, indem man alle Ziffern der dezimalen Darstellung von n miteinander multipliziert. Offenbar ist das Querprodukt einer Zahl n immer kleiner als die Zahl selbst (warum?). Wendet man also die Bildung des Querproduktes (ausgehend von n) immer wieder an, erhält man eine (echt) absteigende Folge von neuen Zahlen, die irgendwann einstellig werden muss.



...das habe ich soweit verstanden und versucht mit diesem Code umzusetzen:


```
public class quer {

     static int iteriertesQuerprodukt(int zahl) {
    // Die zahl wird solange durch ihr Querprodukt
    // ersetzt, bis das Ergebnis einstellig ist
	
    // Iterieren der Querproduktbildung:
    while (zahl > 9) {
      
      // Berechnung das einfache Querprodukt:
      int querprodukt = 1;
      do {        
        querprodukt = querprodukt * zahl % 10;
        zahl = zahl / 10;
	
      } while (zahl > 0);
	
      zahl = querprodukt;
    }

    return zahl;
  }

public static void main(String[] args) {

		int zahl = Integer.parseInt(args[0]);		
		System.out.println("Das iterierte Querprodukt ihrer Zahl ist " + iteriertesQuerprodukt(zahl));
}
}
```


Weiter steht in der Aufgabe:



> In dieser Aufgabe interessiert nun die Anzahl der Schritte k (Wie oft muss das Querprodukt erneut gebildet werden?) bis dieser einstellige Fall eintritt.
> 
> Für einstellige Zahlen ist offenbar k==1. Die kleinste Zahl, die 2 Schritte erfordert, ist offenbar:
> _25 -> 2*5 = 10 -> 1*0 = 0_
> ...




```
$ java Quer 4
2 Schritte: 25
3 Schritte: 39
4 Schritte: 77
$
```



> Zur Kontrolle Ihres Algorithmus sehen sie die richtigen Zahlen bis zu 4 Schritten in der Musterausgabe.
> 
> Natürlich wird Ihr Algorithmus mit zunehmender maximaler Schrittzahl auch länger brauchen, um die Ergebnisse zu bestimmen. Vermutlich wird er die Ergebnisse für kmax== 8 noch in weniger als einer Sekunde berechnen (hoffentlich. Auch kmax== 9 sollte noch im Sekundenbereich liegen. Allerdings wird kmax== 10 schon erheblich länger dauern, insbesondere passt die Zahl, für die man 10 Schritte braucht, nicht mehr in den Java-Datentyp int, wohl aber in den größeren Typ long.



Hat jemand eine Idee, wie ich nun vorgehen könnte????:L

Gruß


----------

