Multiplikation von großen Zahlen, ohne BigInt uä

Snaap

Mitglied
Aufgabenstellung:
Addition und Multiplikation von großen Zahlen, ohne BigInt uä. (-> Ausgabe als String)

Addition war relativ einfach zu Lösen, mit Multiplikation hab ich aber Probleme...

Mein Ansatz war so:
Zahlenkette wird als String eingegeben und dann in ein Array Verarbeitet:
"142" -> Array [0] = 2 [1] = 4 [2] = 1
"214" -> [0] = 4 [1] = 1 [2] = 2

und jetzt weiß ich nicht wie ich weitermachen soll (hab schon verschiedene Varianten ausprobiert, nicht läuft so wie ich möchte -.-)

ich müsste ja eig so rechnen:
c = 1;

X = [a] * ( + c)
c = c * 10
b + 1 bis fertig

a = a +1 und wieder mit b durch

->
(1*4) * 10^2+
(1*1) * 10^3+
(1*2) * 10^4+
(4*4) * 10^1+
(4*1) * 10^2+
(4*2) * 10^3+
(2*4) * 10^0+
(2*1) * 10^1+
(2*2) * 10^2

aber durch dieses *10 kommen wieder zu große zahlen raus -> keine Lösung der Aufgabenstellung.

Ich müsste also irgendwie die Felder in Strings umwandeln und dann Nuller ranhängen? Blick grad echt ned wie des gehen soll -.-

Suche hier keine Lösung, sondern nur einen Ansatz (gerne mit Beispiel 😀) wie ich das Problem lösen kann.

Vielen Dank

MfG
 
Zuletzt bearbeitet:
Ich möchte nicht zu sehr deinen Ehrgeiz zur eigenen Lösung wegnehmen.

Tipp: Viele Kleine können etwas Großes bewirken.

Wenn du nicht weiter kommst, frag hier ruhig.

Mit freundlichen Grüßen
DoS
 
Wozu brauchst du die 10er-Stellen, wenn du das als String ausgeben möchtest?

i[0] = 2:
i[1] = 3;

j[0] = 5;
j[1] = 4


ergebnis = i[0] * j[0] = 10; = > Als letzten Wert muss eine 0 hin. (Evtl. hilft dir Modulo weiter.)
ergebnis2 = i[1] * j[1] + (int)(ergebnis/10);
String zahl= neuesZiffer + "" + zahl;
 
Versteh ich erlich gesagt überhaupt nicht /:
deim nachrechnen bekomm ich nur für die letze stelle das richtige ergebniss.. ich würd sagen ich mach irgenwas falsch ;D

MfG
 
Hm, dann komme ich einfach mal zu deinem Ansatz zurück 🙂

(1*4) * 10^2+
(1*1) * 10^3+
(1*2) * 10^4+
(4*4) * 10^1+
(4*1) * 10^2+
(4*2) * 10^3+
(2*4) * 10^0+
(2*1) * 10^1+
(2*2) * 10^2

Du teilst die einzelnen große Rechnung in Teilbereiche ein (Kleiner Tipp, fange von hinten an):
142 * 214 =
Code:
 2 * 214
+4 * 214
+1 * 214

Die Teilbereiche müssen nochmal untetteilt werden:

Code:
2 * 4
2 * 1
2 * 2

Code:
4 * 4
4 * 1
4 * 2

Code:
1 * 4
1 * 1
1 * 2

Und jetzt hast du eignetlich schon das gesamte Problem gelöst:

2 * 4
2 * 1
2 * 2

Ist eigentlich das selbe wie:
String s1 = 2*4 + "";
String s2 = 2*1 + "0";
String s3 = 2*2 + "00"

Wenn du nun überlegst, dann erkennst du eine for Schleife bei der jeden Durchlauf eine "0" hinzugefügt wird. Die Teilergebnisse musst du dann selbstversändlich irgendwie addieren (s1 + s2 +s3):

Addition war relativ einfach zu Lösen

Genau, du addierst mit deiner anderen Methode. Ich hoffe mal du hast es verstanden ;-)
 
Vielen Dank 🙂

Ich versteh den Ansatz und er scheint auch um einiges Sinnvoller zu sein als das was ich bisher gerechnet hab, aber das Probleme wäre dass ich eine variable anzahl von Strings erzeugen müsste.. geht das? wenn ja wie?


Find die Aufgabe so langsam viel zu schwer für ne 10. Klasse -.-
MfG
 
Mit einer ArrayList könntest du beliebig viele Strings erstellen, aber normalerweise geht das bei so einer Aufgabe auch mit einer Schleife. Ich habe mal schnell eine Lösung zusammengetippt, wie das eigentlich aussehen sollte.
(Keine Garantie, dass es funktioniert, aber das Prinzip kannst du übernhemen.)

Java:
public String gibErgebnis() {
    // Umwandlung usw.
    // i = ...
    // j = ...
    multipliziere(i,j);
}

/**
* Für Multiplikationen, wie 23456245675 * 4344365334 
*/
public String multipliziere(int[] multiplikator, int[] multiplikand) {
    String ergebnis = "0";
    String nullen = "";

    for(i= 0; i< multiplikand.length; i++) {
        ergebnis = addieren(ergebnis, multipliziere(multiplikator, multiplikand[i]) + nullen);
        nullen += "0";
    }

    System.out.println(ergebnis);
    return ergebnis;
}

/**
* Für Multiplikationen, wie 23456245675 * 4
*/
public String multipliziere(int[] multiplikator, int multiplikand) {
    String ergebnis = "0";
    String nullen = "";

    for(int i = 0; i < multiplikator.length; i++) {
        ergebnis = addieren(ergebnis, multiplikator[i] * multiplikand + nullen);
        nullen += "0";
    }

    System.out.println(ergebnis);
    return ergebnis;
}
 

Zurück
Oben