Hi,
aber wie verfährt man mit multiplikation? mache ich das "wie auf papier" werde ich bis zu 999 "999stellige" zahlen addieren müssen, das Ergebnis kann bis zu 1998-stellen haben
Ich weiß nicht ob es der beste Algorithmus ist, aber wir haben mal gelernt, wie man in der Digitaltechnik Multiplizierer entwerfen kann. So ähnlich würde ich es hier auch machen.
Hier mal ein Beispiel mit 3 statt 999 Stellen:
333 * 415
---------
1665 Feld1 (max 4 Stellen)
+ 333| Feld2 (max 4 Stellen)
---|
499| Feld1
+1332|| Feld2
--------
138195 ErgFeld (max 6 Stellen)
Die letzte Stelle (da wo drunter | steht) kann immer direkt fürs Ergebnis übernommen werden. Du brauchst dir also immer nur 2 Summanden (Feld1 und Feld2) mit einer maximalen Länge von je 1000 und das Ergebnis (ErgFeld) mit einer maximalen Länge von 1998 merken. Macht insgesamt 3998 Byte.
Ein anderer (schlechterer) Ansatz wäre, wenn du dir immer das ganze Ergebnis merkst, dann bräuchtest du soweit ich das überblicke 2 Felder mit je 1998 Elementen.
333 * 415
---------
1665 Feld1
+ 3330 Feld2
-----
4995 Feld1
+133200 Feld2
---------
138195 Feld1
Der Speicherbedarf hier sollte annähernd der gleiche sein (minimal weniger), aber der Rechenaufwand wird höher, da du zum Schluss 2mal 1998 Stellen bei der Addition hast.
es wäre extrem rechenaufwendig, zudem müsste ic hdie riesiegen arrays im voraus reservieren.
Das Reservieren im Voraus sollte aber schneller sein, wie wenn du jedes Byte einzeln reservierst. Am schluss müsste ja eh alles im Speicher stehen.
Ich Finde 2000 Zeichen eh nicht so schlimm, wenn du nicht gerade im Embedded-Bereich arbeitest.
was macht man aber in C in solchen fällen? arrays variabler-länge lassen sich ja nicht definieren, bzw - ich weiss nciht wie,
was wäre der ansatz?
Meinst du sowas wie dynamische Speicherreservierung?
Mit malloc(), calloc() und realloc() kannst du je nach Bedarf Speicher reservieren. Mit free() gibst du ihn anschließend wieder frei.
In C++ geht es (wie ich finde) etwas komfortabler mit dem new/delete-Operator.
Aber ich weiß nicht, ob dir das viel bringt. Ich würde es mal versuchen, die 3 zusätzlich benötigten Felder einfach fest anzulegen.
mfG,
steckl