Hilfe benötigt bei Aufteilung von Zahlen in Ziffern zu weiteren Berechnungen

VooDoo08

Grünschnabel
Hallo!
Ich bin Programmier-Anfänger und hab bei einer Übungsaufgabe das ein oder andere Problem.
Hier die Aufgabe:

Die Dezimalziffern einer natürlichen Zahl n, n >= 1, werden einzeln quadriert und addiert. Anschließend wird mit der entstandenen Summe genauso verfahren. Die Ausgangszahl n heißt "gut", wenn man letztlich bei diesem Vorgehen auf die Zahl 1 stößt, ansonsten ist sie "schlecht".
Beispiel für n = 7:
7: 7*7 = 49
49: 4*4 + 9*9 = 97
97: 9*9 + 7*7 = 130
130: 1*1 + 3*3 + 0*0 = 10
10: 1*1 + 0*0 = 1

Nun soll ein JAVA-Programm geschrieben werden, dass alle "guten" Zahlen zwischen einer Ober- und einer Untergrenze berechnet und die dazugehörigen Folgen ausgibt. Der Dialog soll folgendermaßen aussehen:
Bitte geben Sie die untere Grenze ein: 5
Bitte geben Sie die obere Grenze ein: 30
7 -> 49 -> 97 -> 130 -> 10 -> 1
10 -> 1
19 -> 82 -> 68 -> 100 -> 1
23 -> 13 -> 10 -> 1
28 -> 68 -> 100 -> 1



Die Scanner für die Ober- und Untergrenze hab ich problemlos zum laufen bekommen.
Die Probleme hab ich bei der Aufteilung der Zahlen in Ziffern.
Ich habe versucht, es in verschiedenen arrays zu speichern, aber das klappt nicht so richtig.
Dann hab ich sie mit ner anderen Methode als strings rausbekommen, aber dann konnte ich die zaheln nicht quadrieren...

Ich verzweifle so langsam und wäre für den ein oder anderen Denkanstoß sehr dankbar.
Ich verlange keine Komplettlösung, aber ein paar Hinweise, was ich beachten muss, wären wirklich hilfreich.

MfG
VooDoo08
 
Die Probleme hab ich bei der Aufteilung der Zahlen in Ziffern.
Ich habe versucht, es in verschiedenen arrays zu speichern, aber das klappt nicht so richtig.
Dann hab ich sie mit ner anderen Methode als strings rausbekommen, aber dann konnte ich die zaheln nicht quadrieren...
Bei dieser Berechnung kann man auch ganz auf die Umwandlung in Strings verzichten. Dazu braucht man nur etwas elementare Mathematik, nämlich eine wiederholte Division durch 10 mit Rest. Exemplarisch für die Zahl 123 durchgeführt:
Code:
123 DIV 10 = 12 REST 3 -> Ziffer 3
  v-----------'
 12 DIV 10 =  1 REST 2 -> Ziffer 2
  v-----------'
  1 DIV 10 =  0 REST 1 -> Ziffer 1
  v-----------'
  0 -> fertig!
Jetzt musst du nur noch wissen, dass man den Divisionsrest in Java mit dem %-Operator berechnet. Die ganzzahlige Division geschieht einfach mit /. Das ganze jetzt noch in eine while-Schleife gepackt und man ist so gut wie fertig.

Wenn noch Unklarheiten sind, dann frag einfach nochmal nach.

Grüße,
Matthias
 
Unser Beispiel war folgendes:

Code:
int zahl = ...                                // zu untersuchende Zahl
int dummy = zahl
while (dummy != 0) {
  int einer = dummy % 10;
  dummy = dummy / 10;
  if (einer != 0 && zahl % einer == 0)
    System.out.println("Zahl ist durch " + zahl + " teilbar!";
}

Das Programm zerlegt auch mehr als dreistellige Zahlen.

Die zu untersuchende Zahl kann ich ja schon über den Scanner, den ich eingerichtet hab, einlesen.
Jetzt ist nur meine Frage, wie ich nach der Zerlegung die einzelnen Ziffern zwischenspeichern kann um sie dann zu quadrieren und die ergebnisse zu addieren, solange bis 1 rauskommt.
Dazu muss ich ja die IF-Schleife ersetzen, aber ich weiß nicht, wie ich die einzelnen Ziffern speichern kann.
 
Hi.
Jetzt ist nur meine Frage, wie ich nach der Zerlegung die einzelnen Ziffern zwischenspeichern kann um sie dann zu quadrieren und die ergebnisse zu addieren, solange bis 1 rauskommt.
Dazu muss ich ja die IF-Schleife ersetzen, aber ich weiß nicht, wie ich die einzelnen Ziffern speichern kann.
Die einzelnen Ziffern brauchst du doch gar nicht speichern. Du mußt einfach die aktuelle Ziffer (den Rest) quadrieren und dann zu einer Summe hinzuaddieren.

Gruß

PS: if ist keine Schleife!
 
ich bekomm es nicht vernünftig zum laufen :confused:
bin wohl zu dumm dafür...
Ungefähr so:
Java:
int summe = 0;

while (zahl != 0) {
  int ziffer = zahl % 10;
  summe += ziffer * ziffer;
  zahl /= 10;
}
Das wäre der Teil um die Summe der quadrierten Ziffern einer Zahl zu berechnen. Wie du siehst mußt du die Ziffern nicht speichern, man berechnet gleich damit die Gesamtsumme.

Das würde man jetzt als eigenständige Funtion definieren und innerhalb einer anderen Schleife verwenden. Da müßtest du allerdings die Abbruchbedingung bedenken. Wenn genau ist denn eine Zahl gut, und vor allem wann ist sie schlecht? Ist denn die Funktion überhaupt berechenbar? Wann stoppt der Algorithmus denn für eine schlechte Zahl?

Gruß
 
Zurück