Größere Datentypen

Nicolex3

Mitglied
Guten Tag liebes Forum,

ich habe mir folgende Aufgabe gestellt: Wenn ich eine Zahl wähle z.B. 30123910923, dann soll die Quersumme davon berechnet werden und dann soll die Quersumme mal 2 genommen werden, dann soll die Zahl also 30123910923 rückwärts gelesen werden, dann soll die Summe aus der ersten also 30123910923 und rückwärtsgelesenen Zahl 32901932103 berechnet werden, dann von der neuen Summe, wieder die Quersumme und geguckt werden, ob die Quersummen übereinstimmen, falls ja soll er stoppen, falls nein soll er den ganzen Vorgang nochmal wiederholen mit der Summe der beiden zahlen 30123910923 + 32901932103 und immer so weiter, bis das eintrifft.

Das Problem ist, also ich sag mal so das ist an sich kein Problem, aber leider sind Datentypen begrenzt und wenn mal die Summe über diesen Bereich liegt, habe ich Probleme.

Wie könnte ich das lösen?

Tipps, Tricks, nur her damit. :)

Vielen Dank.
 

Nicolex3

Mitglied
Hey Kirby,

danke erstmal für die schnelle Antwort.

Und mit BigInteger gehen auch alle Zahlen bis unendlich? ^^

BigInteger hatten wir zwar noch nicht gelernt, weiß nicht, ob er das erlauben würde, also wir hatten eigentlich bisher long, int, string, double .. so die üblichen und arrays und sowas.
 

Kirby.exe

Top Contributor
Also das Maximum, welches du mit primitiven Datentypen darstellen kannst sind 64 Bit Zahlen ;) Mit BigInteger gehen größere Zahlen :) Wie groß genau, weiß ich ehrlich gesagt nicht mehr :)
 

LimDul

Top Contributor
Hey Kirby,

danke erstmal für die schnelle Antwort.

Und mit BigInteger gehen auch alle Zahlen bis unendlich? ^^

BigInteger hatten wir zwar noch nicht gelernt, weiß nicht, ob er das erlauben würde, also wir hatten eigentlich bisher long, int, string, double .. so die üblichen und arrays und sowas.
Solange der Speicher reicht :) Also ja, kein hartes Limit.
 
K

kneitzel

Gast
Wenn man das nicht nutzen möchte, dann kann man sich sowas ja selbst überlegen.

Dann besteht eine Zahl z.B.:
- aus einem String. Halte ich für die schlechteste Option, da Du ja rechnen willst damit. Aber würde gehen.
- aus einer Menge an Zahlen. Wie diese genau abgespeichert werden, muss man dann sehen. Da könnte man z.B. eine Liste an long Zahlen nehmen. Oder ähnlich wie den String einfach als einzelne Ziffern ...

Und damit kann man dann die Rechenoperationen ausführen. Da kann man recht viel basteln. Das mit den Strings ist sehr anschaulich - so könnte man z.B. die Rechenarten "schriftlich" durchführen ... Addition wäre also sowas wie das untereinander schreiben von den Zahlen incl. einer Zahl, die Überträge speichern kann. Und dann wird von hinten nach vorne fleißig addiert.

Multiplikation ließe sich ähnlich aufbauen und dann vielleicht auf eine Multiplikation einer Zahl mit nur einer Ziffer + aufaddieren der Zwischenergebnisse ... also so, wie man das ja auch beim schriftlichen multiplizieren machen kann ...

Das ist extrem suboptimal. Aber für einen Anfänger eine interessante Sache, weil es es sehr anschaulich selbst durchspielen kann.

Aber der mathematische Weg ist natürlich besser und ich nutze möglichst gut die entsprechenden Datentypen. (Da kommen wir dann aber auch wieder auf signed / unsigned zurück fürchte ich ... aber egal - das Vorzeichen kann man sich ja schenken (dient dann evtl. als Flag für den Überlauf ...)

Das einfach mal als ein paar Gedanken, falls man eine Übung machen will. Die fertige Klasse / Implementierung wurde ja genannt :)
 

Nicolex3

Mitglied
Wenn man das nicht nutzen möchte, dann kann man sich sowas ja selbst überlegen.

Dann besteht eine Zahl z.B.:
- aus einem String. Halte ich für die schlechteste Option, da Du ja rechnen willst damit. Aber würde gehen.
- aus einer Menge an Zahlen. Wie diese genau abgespeichert werden, muss man dann sehen. Da könnte man z.B. eine Liste an long Zahlen nehmen. Oder ähnlich wie den String einfach als einzelne Ziffern ...

Und damit kann man dann die Rechenoperationen ausführen. Da kann man recht viel basteln. Das mit den Strings ist sehr anschaulich - so könnte man z.B. die Rechenarten "schriftlich" durchführen ... Addition wäre also sowas wie das untereinander schreiben von den Zahlen incl. einer Zahl, die Überträge speichern kann. Und dann wird von hinten nach vorne fleißig addiert.

Multiplikation ließe sich ähnlich aufbauen und dann vielleicht auf eine Multiplikation einer Zahl mit nur einer Ziffer + aufaddieren der Zwischenergebnisse ... also so, wie man das ja auch beim schriftlichen multiplizieren machen kann ...

Das ist extrem suboptimal. Aber für einen Anfänger eine interessante Sache, weil es es sehr anschaulich selbst durchspielen kann.

Aber der mathematische Weg ist natürlich besser und ich nutze möglichst gut die entsprechenden Datentypen. (Da kommen wir dann aber auch wieder auf signed / unsigned zurück fürchte ich ... aber egal - das Vorzeichen kann man sich ja schenken (dient dann evtl. als Flag für den Überlauf ...)

Das einfach mal als ein paar Gedanken, falls man eine Übung machen will. Die fertige Klasse / Implementierung wurde ja genannt :)

Das sieht doch interessant aus. Ist glaube ich auch eine gute Übung um die schriftliche Addition selber zu implementieren. ^^

Also Listen hatten wir spezifisch noch nicht, wir hatten nur Arrays. Aber wenn man ein Array erzeugt, dann hat man doch nur ein bestimmtes Limit an Plätzen oder nicht?

Und wenn ich meine große Zahl also z.B. 94782309437209478093270947320
in einem Array speichern will, dann brauche ich ja genauso viel Plätze wie ich Ziffern habe. Oder es kann sein, dass ich Sie falsch verstanden habe.
 
K

kneitzel

Gast
Ja, aber jede Zahl hat eine feste Anzahl an Ziffern. Bei Operationen muss man sich überlegen, wie viele Ziffern man dann braucht.

Ggf. überschlägt man es einfach und geht vom worst case aus:
Addition von Zwei Zahlen hat im worst case eine Ziffer mehr.
Multiplikation hat im Worst case Anzahl der Ziffern der ersten Zahl mal Anzahl Ziffern der zweiten Zahl.

9*9 < 100
99*99 < 10000
sieht man relativ deutlich ...

Ich würde Zahlen also auch unveränderlich halten. Also so wie Strings. Wenn du eine Zahl hast, dann verändert die sich nicht durch Methodenaufrufe.

Und nimm keine Strings / Zeichen. Du kannst gerne das 10er System nehmen aber dann Speicher die Ziffern (z.B. in Bytes) ...
 
K

kneitzel

Gast
Alles gut, ich bin nicht verwirrt. ^^
Du hast auch keinen verwirrten Eindruck gemacht ... Der einzig verwirrte bin ich jetzt hier, denn ich frage mich ernsthaft, wer extra einen neuen Account erstellt um mich hier so anzugehen... Aber wie dem auch sei - es lohnt nicht, darüber nachzudenken :)
 

Nicolex3

Mitglied
Ich überlege gerade. Jede Zahl hat ja an sich eine feste Anzahl an Ziffern und die Ziffern muss ich irgendwo abspeichern. In einem Array kann ich so eine große Zahl nicht abspeichern.

"Und nimm keine Strings / Zeichen. Du kannst gerne das 10er System nehmen aber dann Speicher die Ziffern (z.B. in Bytes) ..."

Was genau meinst du mit diesem Teil? Also könnte ich in der Theorie die Zahl 98239849823498 in Bytes speichern?

"Der einzig verwirrte bin ich jetzt hier, denn ich frage mich ernsthaft, wer extra einen neuen Account erstellt um mich hier so anzugehen... Aber wie dem auch sei - es lohnt nicht, darüber nachzudenken :)"

Ach heutzutage sind immer viele Trolls unterwegs :/
 
K

kneitzel

Gast
Nehmen wir einfach eine Zahl: 123456789

Diese besteht aus 9 Ziffern, die jeweils einen bestimmten Wert haben:
9 ist auf dem Platz mit Wert 10^0 -> Wert 9
8 ist auf dem Platz mit Wert 10^1 -> Wert 80
7 ist auf dem Platz mit Wert 10^2 -> Wert 700

Somit bietet sich ein Array an. Dazu muss man sich einen Typ überlegen, in dem ich es speichern kann. Byte scheint hier tauglich zu sein.

Somit könnte ich diese Zahl in einem byte Array mit 9 Feldern speichern.
 
K

kneitzel

Gast
Ich habe da einiges noch nicht wirklich durchdacht, aber die Aufgabe gefällt mir. Der Datentyp könnte also beinhalten:

- Ein Array vom Typ byte, die dann mit Zahlen von 0-9 gefüllt sind.

- Vorzeichen sollte man noch bedenken. Das könnte man prinzipiell auf einer Position mit abspeichern, aber ich würde das vom Design her eher unschön finden. Wir machen ja jetzt schon so eine extra Locke, so dass wir da nicht anfangen sollten, Speicher effektiv zu nutzen.
Daher: nehmen wir noch ein boolean positiv. Das können wir setzten - je nachdem, ob die Zahl positiv oder negativ ist.

Funktionalitäten, die interessant sein könnten:
- getDigits() -> gibt an, wie viele Ziffern die Zahl hat. Würde führende 0er nicht beachten.
- Konstruktor für long und auch String new BigNumber(100) oder new BigNumber("100") sollten also gehen.
- Grundrechenarten in der Form BigNumber add(MyBigNumber other), d.h. wenn ich a.add(b) berechne, dann bleiben a und b unverändert und es wird eine neue Instanz zurück gegeben.

Bezüglich der benötigten Ziffern wäre ich generell Großzügig: Bei einer Addition würde ich einfach getDigits von beiden Zahlen aufrufen und das Maximum der beiden + 1. Dann ist man auf der sicheren Seite (und hat ggf. eine Ziffer zu viel ...)

Das einfach einmal als ein paar Gedanken für einen schnellen Start. Evtl. sollte man sich dann überlegen, wie z.B. Vorzeichen beachtet werden sollten. 4 + (-2) ist halt 4 - 2 oder -4 + 2 = 2 - 4 oder -4 - 2 = - (4+2). Ob diese Regeln interessant sind für Dich oder nicht musst Du Dir überlegen. Die Addition und Subtraktion kann dann ggf. stark vereinfacht dargestellt werden. Bei der Subtraktion könnte interessant sein, dass die größere Zahl von der kleineren abgezogen wird - also 2 - 4 ist - (4 - 2) - dann ist das schriftliche subtrahieren einfacher ...
(Wobei ich das noch nicht im Detail durchdacht habe... evtl. rede ich da gerade Quatsch ... das müsste man sich noch im Detail überlegen.)
 
K

kneitzel

Gast
Wenn es wirkliche Fragen gibt, dann kann man das richtig ausformulieren. Dann wird einem weiter geholfen. Ansonsten werden sie einfach ignoriert. (So unterstelle ich nichts. Das Forum zeigt an, dass der Post eben der erste Post hier im Forum war und ihr Account gerade mal 30 Minuten existiert. Somit ist es wohl ein Fakt oder zumindest naheliegend, dass der Account für diesen Post erstellt wurde. Damit aber genug Off Topic diesbezüglich - der wichtige Punkt ist gesagt: Vernünftige On Topic Fragen stellen, dann wird (ggf) geantwortet. Ansonsten gerne einen Thread in der Plauderecke starten, wenn Du plaudern willst...
 

Nicolex3

Mitglied
Diese ganzen Begriffe haben wir noch garnicht gelernt und besprochen :( (Constructor, getDigits()...)

Diese Aufgabe scheint mir irgendwie unmöglich für mich zu lösen. Ich könnte versuchen ein Array immer neuzusetzen und das Array abhängig von der Summe zu machen, aber das würde das Problem auch nicht lösen. :(
 

Kirby.exe

Top Contributor
Ich würde an deiner Stelle deinen Lehrer oder Prof fragen, ob Ihr BigInteger nutzen dürft, da dies hier die "einfachste" Lösung ist :)
 
K

kneitzel

Gast
Diese ganzen Begriffe haben wir noch garnicht gelernt und besprochen :( (Constructor, getDigits()...)

Diese Aufgabe scheint mir irgendwie unmöglich für mich zu lösen. Ich könnte versuchen ein Array immer neuzusetzen und das Array abhängig von der Summe zu machen, aber das würde das Problem auch nicht lösen. :(
Ich sehe das auch nur als zusätzliche Spielerei - das ist keine Lösung für die Aufgabe.

Ich würde erst einmal die Frage aufwerfen, ob wirklich so große Zahlen notwendig sind. Du hast da gerade mal 11 Stellen oder so gehabt bei der Zahl ...

Der Datentyp long deckt den Bereich (−9.223.372.036.854.775.808, 9.223.372.036.854.775.807) ab. also 18 Stellen sind da sicher abgedeckt, fast 19!

Wenn nicht explizit noch größere Zahlen verlangt sind, dann dürfte der Datentyp long statt int (-2.147.483.648 ... 2.147.483.647) ausreichen. Und das klang jetzt auch etwas danach, dass ihr noch ganz am Anfang seid - da sind dann jetzt wohl erst einmal die grundlegenden Typen sowie der Umgang damit das eigentliche Thema.
 

Nicolex3

Mitglied
Also mit der Begrenzung das habe ich hinbekommen. Aber wir sollen das jetzt auch ohne diese Einschränkung von Long etc. machen. Ich würde das liebend gerne mit dieser BigInteger Methode machen, aber unser Übungsleiter will das nicht. :/
Der will das wir das irgendwie mit Arrays lösen.
 

White_Fox

Top Contributor
Diese Aufgabe scheint mir irgendwie unmöglich für mich zu lösen.
Bloß nicht entmutigen lassen...je größer das Problem, desto mehr wächst du daran. :)

Aber ich denke auch daß long ausreichen sollte für das, was du tun sollst. Integer ist schon ein ziemlich großer Zahlenbereich. 2^31 - 1 das sind 2.147.483.647 oder zwei Milliarden 147 Millionen vierhunderdreiundachtzigtausendsechshundertsiebenundvierzig.

Um mal ein Gefühl für die Größenordnung zu kriegen: Wenn du Millisekunden zählen willst - also pro Sekunde 1.000 addieren - kannst du fast 25 Tage zählen bis dir der Zahlenbereich zu klein wird. Und das ist "nur" Integer.

Bei Long (2^63-1, bzw. 9.223.872.037.000.000.000) kannst du auf die gleiche Weise 292.471.208,7 Jahre durchzählen bis du an einen Überlauf gerätst. Unterschätze niemals Potenzen, auch wenn 2^64 nicht gerade beeindruckend aussieht.
 
K

kneitzel

Gast
Wir schauen uns einfach noch einmal die Aufgabe im Detail an und gliedern das dann auf in mehrere Teile. Du hattest geschrieben:

"ich habe mir folgende Aufgabe gestellt: Wenn ich eine Zahl wähle z.B. 30123910923, dann soll die Quersumme davon berechnet werden und dann soll die Quersumme mal 2 genommen werden, dann soll die Zahl also 30123910923 rückwärts gelesen werden, dann soll die Summe aus der ersten also 30123910923 und rückwärtsgelesenen Zahl 32901932103 berechnet werden, dann von der neuen Summe, wieder die Quersumme und geguckt werden, ob die Quersummen übereinstimmen, falls ja soll er stoppen, falls nein soll er den ganzen Vorgang nochmal wiederholen mit der Summe der beiden zahlen 30123910923 + 32901932103 und immer so weiter, bis das eintrifft."

Also erst einmal wird eine sehr lange Zahl eingegeben. Da die üblichen Zahlen ausfallen in Java muss die Eingabe als String erfolgen.
-> Eingabe eines Strings

Diese Eingabe musst Du dann verarbeiten:
-> wir brauchen ein Array von Zahlen das so viele Zahlen enthalten kann, wie Zeichen eingegeben wurden.
-> Du gehst die Zeichen der Eingabe durch und prüfst jedes Zeichen auf Gültigkeit und speicherst die Zahl im Array

Wenn die Eingabe erfolgt ist, kommt die eigentliche Berechnung:

Quersumme berechnen:
- Das ist ja die Summe aller Zahlen in dem Array.

- Diese Quersumme dann mal 2 nehmen ... auch ok.

- Dann die Addition der Zahl mit der umgedrehten Zahl - da haben wir ja schon festgestellt: Evtl. brauchen wir dann eine Ziffer mehr. Also das Ziel-Array wird um eins größer. Kannst Du da jetzt die Zahlen addieren und im Ziel Array abspeichern?

- Dann wieder Quersumme berechnen - hatten wir oben schon - daher das Berechnen der Quersumme von einem Array aus Ziffern auch als eigene Methode bauen. Dann kann man es immer, wenn man es braucht, aufrufen....

- Dann der Vergleich der Quersummen. Ist dies nicht erfolgreich, dann machst Du wieder beim oberen Schritt weiter.

Also das ist dann in Pseudo Code ja:
- String eingabe = eingabeVonNutzerAbfragen();
- byte[] zahl = convertToZifferArray(eingabe);
- Mache:
---> int quersumme1 = quersumme(zahl);
---> zahl = summeVonZahlMitUmgedrehterZahl(zahl);
---> int quersumme2 = quersumme(zahl);
- So lange bis quersumme1 == quersumme2

Das ist ja schon fast 1:1 in Java übersetzbar und es müssen noch ein paar Methoden geschrieben werden ...
 

White_Fox

Top Contributor
Dann solltest du dir Arrays aus dem Kopf schlagen und das lieber mit ArrayList machen. Das Problem, das du mit Arrays haben wirst, ist, daß diese eine starre Größe haben. Die Größe von ArrayLists kannst du dynamisch anpassen, ansonsten verhält sich ArrayList ähnlich wie ein Array.

Dann bist du zwar auch irgendwo limitiert da der Index vom Typ Integer ist (und die ArrayList damit "nur" 2^31-1 Elemente aufnehmen kann), aber nun gut. Ich halte diese Aufgabe allerdings nicht allzu durchdacht für Anfänger...aber das ist ein anderes Thema.

Hast du eine Idee, wie du das lösen willst?
 
K

kneitzel

Gast
Dann solltest du dir Arrays aus dem Kopf schlagen und das lieber mit ArrayList machen. Das Problem, das du mit Arrays haben wirst, ist, daß diese eine starre Größe haben. Die Größe von ArrayLists kannst du dynamisch anpassen, ansonsten verhält sich ArrayList ähnlich wie ein Array.

Dann bist du zwar auch irgendwo limitiert da der Index vom Typ Integer ist (und die ArrayList damit "nur" 2^31-1 Elemente aufnehmen kann), aber nun gut. Ich halte diese Aufgabe allerdings nicht allzu durchdacht für Anfänger...aber das ist ein anderes Thema.

Hast du eine Idee, wie du das lösen willst?
Das sehe ich nicht so. Array sind durchaus tauglich in meinen Augen. Bei der Addition ist das Zielarray vorsichtshalber um ein Feld größer und bei der Addition mit dem Kehrwert muss man führende 0 entfernen. 0123 soll halt als 123 genommen werden und 444 ergeben und nicht 3333. Aber die einzelnen Methoden sind relativ einfach umsetzbar nur mit den reinen Grundmitteln.
 

White_Fox

Top Contributor
Ich weiß jetzt nicht mehr ob sie auch multiplizieren will, aber da müßte das Array schon doppelt so groß sein wie die (unbekannten) Operanden.

Aber ok, vielleicht will ich gerade zu stark vereinfachen. Eigentlich würde ich erstmal das Problem Berechnung mit unbeschränktem Zahlenraum lösen und danach erst diese anwenden.

Edit:
Gerade nachgesehen - Multiplikation mit zwei ist gefordert, also eine einfache Schiebeoperation. Ok...dann funktioniert das. Es ist in meinen Augen zwar Quark (nichts für ungut @Nicolex3 ), aber das ist die Aufgabe auch.

Nachtrag: Wie ist die Quersumme eigentlich definiert? Ist die Quersumme von 0b111 jetzt 3 oder 7?
 
K

kneitzel

Gast
Gerade nachgesehen - Multiplikation mit zwei ist gefordert, also eine einfache Schiebeoperation. Ok...dann funktioniert das. Es ist in meinen Augen zwar Quark (nichts für ungut @Nicolex3 ), aber das ist die Aufgabe auch.
Wo hast Du das gesehen? Ich war im ersten Post und da war nichts mit mal 2 - da war dann die Summe der beiden Zahlen, von der auch die Quersumme gebildet wurde, die Basis für das weitere vorgehen. Hatte sich die Aufgabe im Laufe des Threads verändert?

Aber bei so Dingen würde ich immer mit worst case arbeiten - also eine Stelle dazu nehmen. Und dann aber bei weiteren Berechnungen die Felder, die zu viel sind, nicht beachten.... nicht dass man sich sonst zu viele 0er am Anfang dazu holt.
 

Nicolex3

Mitglied
@White_Fox alles gut, ich mag die Aufgabe auch nicht.

@kneitzel

Java:
public class Palinzahlen {

    public static void main(String[] args) {
        String eingabezahl = args[0];
        byte[] zahl;
        zahl = new byte[eingabezahl.length()];
        byte[] reversezahl;
        reversezahl = new byte[eingabezahl.length()];
       
        // Zahl in Array speichern
        for (int i = 0; i < eingabezahl.length();i++) {
            zahl[i] = (byte) (eingabezahl.charAt(i) - '0');
        }
       
        // Quersumme berechnen  
        long quersumme1 = 0;
       
        for (int j = 0; j < zahl.length; j++) {
            quersumme1 = zahl[j] + quersumme1;  
        }
quersumme1 = 2 * quersumme1;

       
        // Zahl umdrehen un ein anderen Array verschieben

        for (int j = 0; j < zahl.length; j++) {
            reversezahl[j]= zahl[zahl.length-1-j] ;  
           
        }
       
           
    }

}

Siehts erstmal so ok aus, jetzt ist halt die Frage, wie ich beides miteinander addiere und dann überprüfe, ob ich ein neues Feld im Array brauche? hmm^^
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Wenn Du zwei Arrays der Länge n hast, dann kannst Du ein Ziel-Array der Länge n+1 erstellen.
Dann rechnest Du:
- Zielfeld = Feld aus Array1 + Feld aus Array 2 + Übertrag.
- Wenn Zielfeld > 9 dann zielfeld = zielfeld - 10, Übertrag = 1
sonst uebertrag = 0
Das letzte Feld wird nur mit dem Übertrag gefüllt, da es ja keine Felder von Array1 und Array2 gibt.

Also du hast 7 8 9 und 9 8 7, also hast ein Ziel-Array mit 4 Feldern.

Übertrag = 0
Index0: 9 + 7 = 16, 16 > 10, daher 16-10 = 6 und Übertrag 1
Index1: 8 + 8 + 1 = 17, 17 > 10, daher 17-10 = 7 und Übertrag 1
Index2: 7 + 9 + 1 = 17, 17 > 10, daher 17-10 = 7 und Übertrag 1
index3: 1

1 7 7 6 wäre dann das Ergebnis.
 

Ubk0

Mitglied
Meinst du das so (hier noch ohne BigInteger):
Java:
public class QS {
    public static long quersumme(long l) {
        long s = 0;
        while (l != 0) {
            s += l % 10;
            l /= 10;
        }
        return s;
    }

    public static long rueckw(long l) {
        long s = 0;
        while (l != 0) {
            s = s * 10 + l % 10;
            l /= 10;
        }
        return s;
    }

    public static long get1(long l) {
        return quersumme(l) * 2;
    }

    public static long get2(long l) {
        return rueckw(quersumme(l)) * 2;
    }

    public static void main(String[] args) {
        for (long g0 = 30123910923L; g0 < 30123910923L + 10; g0++) {
            // long g0 = 30123910922L;
            long g1 = get1(g0);
            long g2 = get2(g0);
            while (g1 != g2) {
                System.out.println(g1);
                System.out.println(g2);
                g1 = get1(g1);
                g2 = get2(g2);
            }
            System.out.println(g1);
            System.out.println(g2);
            System.out.println();
        }
    }
}
Es scheint seltsamerweise immer anzuhalten.
 

Ubk0

Mitglied
Hier noch die BigInteger-Variante:
[CODE lang="java" title="Quersumme rückwärts mal zwei (BigInteger)"]import java.math.BigInteger;

public class QS {
public static long quersumme(long l) {
long s = 0;
while (l != 0) {
s += l % 10;
l /= 10;
}
return s;
}

public static long rueckw(long l) {
long s = 0;
while (l != 0) {
s = s * 10 + l % 10;
l /= 10;
}
return s;
}

public static long get1(long l) {
return quersumme(l) * 2;
}

public static long get2(long l) {
return rueckw(quersumme(l)) * 2;
}

public static BigInteger quersumme_bi(BigInteger l) {
BigInteger ten = BigInteger.valueOf(10);
BigInteger s = BigInteger.ZERO;
while (!l.equals(BigInteger.ZERO)) {
s = s.add(l.mod(ten));
l = l.divide(ten);
}
return s;
}

public static BigInteger rueckw_bi(BigInteger l) {
BigInteger ten = BigInteger.valueOf(10);
BigInteger s = BigInteger.ZERO;
while (!l.equals(BigInteger.ZERO)) {
s = s.multiply(ten).add(l.mod(ten));
l = l.divide(ten);
}
return s;
}

public static BigInteger get1_bi(BigInteger l) {
return quersumme_bi(l).multiply(BigInteger.TWO);
}

public static BigInteger get2_bi(BigInteger l) {
return rueckw_bi(quersumme_bi(l)).multiply(BigInteger.TWO);
}

public static void main(String[] args) {
{
long g0 = 30123910923L;
long g1 = get1(g0);
long g2 = get2(g0);
while (g1 != g2) {
System.out.println(g1);
System.out.println(g2);
g1 = get1(g1);
g2 = get2(g2);
}
System.out.println(g1);
System.out.println(g2);
System.out.println();
}
{
BigInteger g0 = BigInteger.valueOf(30123910923L);
BigInteger g1 = get1_bi(g0);
BigInteger g2 = get2_bi(g0);
while (!g1.equals(g2)) {
System.out.println(g1);
System.out.println(g2);
g1 = get1_bi(g1);
g2 = get2_bi(g2);
}
System.out.println(g1);
System.out.println(g2);
System.out.println();
}
BigInteger start = new BigInteger("123456789012345678901234567890");
BigInteger stop = new BigInteger("123456789012345678901234567901");
for (BigInteger g0 = start; !g0.equals(stop); g0 = g0.add(BigInteger.ONE)) {
System.out.println("g0 = " + g0);
BigInteger g1 = get1_bi(g0);
BigInteger g2 = get2_bi(g0);
while (!g1.equals(g2)) {
System.out.println(g1);
System.out.println(g2);
g1 = get1_bi(g1);
g2 = get2_bi(g2);
}
System.out.println(g1);
System.out.println(g2);
System.out.println();
}
}
}[/CODE]
 

Nicolex3

Mitglied
Sieht nice aus. Mein respekt!! :oops: Kannst du noch einbauen, dass man per Konsolen-Argument, also "java "Obergrenze" "x""
jede Zahl von 1 bis zu der Obergrenze durchgeht und die Zahlen ausgibt, die nach 100 Iterationen, nachdem die Obergrennze von Long (meien sogesehen, wenn die Summe über dem Wertebereich von Long erreicht wurde, dass er dann noch 100 Iterationen macht und guckt, ob diese Zahlen noch geklappt hätten) erreicht wurde, die vielleicht noch geklappt hätten.

Also CMD:
java 350 x
192
302

z.B. weiß jetzt nicht, ob diese Zahlen funktionieren, aber nnur damit vielleicht klar ist, was ich meinne.
 

Ubk0

Mitglied
Kannst du noch einbauen, dass man per Konsolen-Argument, also "java "Obergrenze" "x""
jede Zahl von 1 bis zu der Obergrenze durchgeht und die Zahlen ausgibt,
Hey, ja kann/werde ich machen, aber dann muss das Forum erst wieder funktionieren. ;) Bis dahin kannst du dir ja noch eigene Gedanken machen!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
SheldoN Gibt es größere Datentypen als long? Java Basics - Anfänger-Themen 2
F.S.WhiTeY Mehrdimensionales array, größere zahlen von innen nach außen Java Basics - Anfänger-Themen 3
G größere zweier zahlen ermitteln und ausgeben Java Basics - Anfänger-Themen 6
S größere variablentypen Java Basics - Anfänger-Themen 2
B undomanger: "größere" undos Java Basics - Anfänger-Themen 2
R Datentypen Das Verhalten von Strings als Datentypen Java Basics - Anfänger-Themen 7
T Unterschiedliche Datentypen - worin abspeichern? Java Basics - Anfänger-Themen 18
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
J Einige Anfängerfragen (Datentypen, Wertebereich) Java Basics - Anfänger-Themen 11
thor_norsk Datentypen unter Java Java Basics - Anfänger-Themen 3
T Datentypen Eigene Datentypen Java Basics - Anfänger-Themen 15
T for-each-Schleife, verschiedene Datentypen Java Basics - Anfänger-Themen 1
G Methoden Methoden mit versch. Datentypen Java Basics - Anfänger-Themen 1
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
mihe7 Von Datentypen und (mehrdimensionalen) Arrays Java Basics - Anfänger-Themen 4
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
W Vergleiche bei generischen Datentypen Java Basics - Anfänger-Themen 7
D Eingabe einscannen, ohne vorher einen Datentypen anzugeben? Java Basics - Anfänger-Themen 1
M Datentypen Generische Datentypen - Syntax Java Basics - Anfänger-Themen 25
L Binären Bäume für beliebige Datentypen Java Basics - Anfänger-Themen 15
L Datentypen Ausgabe von eigenem Datentypen Java Basics - Anfänger-Themen 2
T Datentypen Kann Java 2 verschiedene Datentypen vergleichen? Java Basics - Anfänger-Themen 2
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
Queiser Datentypen 2 generische Datentypen für eine Schnittstelle Java Basics - Anfänger-Themen 1
SHasteCode Datentypen Überlauf primitiver Datentypen Java Basics - Anfänger-Themen 4
S Datentypen Java Basics - Anfänger-Themen 14
Antegra Tekkrebell Primitive Datentypen Literal 8072 Java Basics - Anfänger-Themen 21
N Array gleiche Datentypen zusammenrechnen Java Basics - Anfänger-Themen 28
S Datentypen Java Basics - Anfänger-Themen 4
S generische methode mit verschiedenen datentypen Java Basics - Anfänger-Themen 3
H wählen des kleinstmöglichen Datentypen für Gleitkommazahlen. Java Basics - Anfänger-Themen 2
S Datentypen Java Basics - Anfänger-Themen 2
S Datentypen Abstrakte Datentypen Java Basics - Anfänger-Themen 0
J Zusammenhang Numbers und nummerische Datentypen Java Basics - Anfänger-Themen 2
F Variablen unterschiedlicher Datentypen Java Basics - Anfänger-Themen 6
A Abstrakte Datentypen - Methode delete Java Basics - Anfänger-Themen 6
J Generics Datentypen vergleichen Java Basics - Anfänger-Themen 16
D Spezifikation abstrakter Datentypen Java Basics - Anfänger-Themen 3
W Datentypen Datentypen vergleichen Java Basics - Anfänger-Themen 4
B JAVA Datentypen/Überlauf Java Basics - Anfänger-Themen 4
I Erste Schritte HILFE bei Datentypen Java Basics - Anfänger-Themen 2
J Wertebereiche und Datentypen Java Basics - Anfänger-Themen 12
N Methode mit 2 Datentypen. Fehler? Java Basics - Anfänger-Themen 1
N Probleme mit Datentypen Java Basics - Anfänger-Themen 6
S Datentypen Unterschied elementare und zusammengesetzte/strukturierte Datentypen Java Basics - Anfänger-Themen 5
L Beliebigen Datentypen aus String parsen Java Basics - Anfänger-Themen 6
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
K new / Datentypen Java Basics - Anfänger-Themen 3
S Datentypen und ihre Größe Java Basics - Anfänger-Themen 21
T Variablen Varargs und beliebige Datentypen Java Basics - Anfänger-Themen 7
S Datentypen Sonderbehandlung primitiver Datentypen, fixe Konstanteninterpretation Java Basics - Anfänger-Themen 10
G Wertebereiche bei Datentypen Java Basics - Anfänger-Themen 10
G Erste Schritte Über verschiedene Datentypen iterieren. Gibt es sowas? Java Basics - Anfänger-Themen 19
S Abfrage Objekt-Array nach Datentypen Java Basics - Anfänger-Themen 6
B Variablen Wie macht man eine call by reference mit primitiven Datentypen in Java? Java Basics - Anfänger-Themen 2
H Mehrer Datentypen aus einer Methode ausgeben. Java Basics - Anfänger-Themen 25
O Array mit unterschiedlichen Datentypen ausgeben... Java Basics - Anfänger-Themen 16
A Generische Datentypen Java Basics - Anfänger-Themen 8
R Input/Output verschiedene Datentypen als Bytes in Datei speichern Java Basics - Anfänger-Themen 15
T ArrayList mit verschiedenen Datentypen verhindern Java Basics - Anfänger-Themen 8
N Bedingung für Datentypen Java Basics - Anfänger-Themen 3
R Array aus verschiedenen Datentypen Java Basics - Anfänger-Themen 29
J Datentypen Datentypen Java Basics - Anfänger-Themen 7
S Datentypen Array fill Methode - unterschiedliche Datentypen Java Basics - Anfänger-Themen 6
H null und primitive Datentypen Java Basics - Anfänger-Themen 6
N ArrayList mit eigenem Datentypen Java Basics - Anfänger-Themen 3
B Wie kann ich unterschiedliche Datentypen in einem Feld abbilden? Java Basics - Anfänger-Themen 5
S Datentypen Die verschiedene Java Datentypen [Anfänger] Java Basics - Anfänger-Themen 8
M Frage zu Datentypen Java Basics - Anfänger-Themen 4
B Welcher Feld Typ für verschiedene Datentypen? Java Basics - Anfänger-Themen 4
O Rückgabewert mit unterschiedlichen Datentypen Java Basics - Anfänger-Themen 10
S Nicht Primitive Datentypen Java Basics - Anfänger-Themen 5
C Verwendung von primitiven Datentypen Java Basics - Anfänger-Themen 8
Spin Eigenen Abstrakten Datentypen Java Basics - Anfänger-Themen 28
J Datentypen Rechnen mit unterschiedlichen Datentypen Java Basics - Anfänger-Themen 3
B Wieviele bits belegen die Datentypen? Java Basics - Anfänger-Themen 2
S Alle Datentypen in byte Array und zurückwandeln Java Basics - Anfänger-Themen 2
C Explizite und implizite Datentypen Java Basics - Anfänger-Themen 12
F primitive Datentypen, String, Klassen Java Basics - Anfänger-Themen 16
Povlsen84 HashSet mit eigenen Datentypen Java Basics - Anfänger-Themen 6
J Verschieden Datentypen in ein "Array" Java Basics - Anfänger-Themen 13
M HashMap mit primitiven Datentypen Java Basics - Anfänger-Themen 10
SebSnake Operatoren für eigene Datentypen Java Basics - Anfänger-Themen 3
G Frage zum Ungang mit Generische Datentypen Java Basics - Anfänger-Themen 4
G Überladen von Konstruktoren mit unterschiedlichen Datentypen Java Basics - Anfänger-Themen 4
R datentypen konvertierung u modulorechnung Java Basics - Anfänger-Themen 15
G primitive Datentypen als Referenz an eine Methode übergeben Java Basics - Anfänger-Themen 2
G Wertebereiche und Datentypen Java Basics - Anfänger-Themen 3
W Datentypen in JAva Java Basics - Anfänger-Themen 2
G verschiedene datentypen in arraylist Java Basics - Anfänger-Themen 14
N Problem mit Tastatureingaben für verschiedene Datentypen Java Basics - Anfänger-Themen 3
I Array für verschiedene Datentypen? Java Basics - Anfänger-Themen 5
E Eigenen datentypen erstellen Java Basics - Anfänger-Themen 14
Y Neuen Datentypen erstellen Java Basics - Anfänger-Themen 12
M int toString Datentypen Umwandeln, AnfängerProblem Java Basics - Anfänger-Themen 3
M Datentypen zu erzeugen? Java Basics - Anfänger-Themen 2
S Switch für komplexe Datentypen? Java Basics - Anfänger-Themen 7
7 Datentypen Java Basics - Anfänger-Themen 8
S Array mit mehreren Datentypen Java Basics - Anfänger-Themen 5
D String in einen primitiven datentypen parsen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben