Dirty Oerti hat geschrieben:Warum nimmst Du nicht das Binärsystem?
Wenn Du Dich auf 9999 beschränkst, nimmst Du vermutlich shorts (Warum eigentlich?). Shorts gehen bis 65536. Also wenn das Problem die maximale Stellenzahl ist. Wenn Du signed und Überlauf berücksichtigst, geht ein Short von -16384 bis +16383. Damit ist der Ziffernraum dreimal größer als Deiner.
Ich rechne im Zehnersystem, weil die Ausgabe im Zehnersystem dann deutlich einfacher geht. (Oder wie berechne ich sonst eine Zahl, von der ich nicht weiß, wie sie heißt, und sie aus 128 Bit besteht, mir jedoch keine 128 Bit zur Verfügung stehen?)
Ehrlich gesagt... keine Ahnung...
Nehmen wir an, wir könnten nur 4 Bit als Zahl ausgeben, als 0-15. Nun haben wir zwei vier Bit Register, für die gilt 0..15 * 16 + 0..15.
Nehmen wir 0x23, das sind zwei Register zu je 4 Bit, also Wert 35.
Nun nehmen wir ein 3 Chars und initialisieren sie jeweilt mit '0': "000"
Jeder Ziffer steht für "16".
Wir rechnen also den Abstand '6'-'0' auf die rechte '0'. => "006" - Überlauf? und dann den Abstand '1'-'0' auf die mittlere '0': "016"
Bleibt 13.
Wir rechnen also den Abstand '6'-'0' auf die rechte Ziffer. => "00C" - Überlauf? Jow - 10 abziehen und +1 auf die mittlere Ziffer: 022 - Überlauf? Nopes. Und dann den Abstand '1'-'0' auf die mittlere Ziffer: "032"
Bleibt 03 - größeres Register erledigt.

Das kleinere Register steht für 1.
Wir rechnen also 1 auf die Rechte Ziffer: "033", bleibt 02 in beiden Registern. Überlauf? Nopes. Abbruch? Nopes.
Wir rechnen also 1 auf die Rechte Ziffer: "034", bleibt 01 in beiden Registern. Überlauf? Nopes. Abbruch? Nopes.
Wir rechnen also 1 auf die Rechte Ziffer: "035", bleibt 00 in beiden Registern. Überlauf? Nopes. Abbruch? Yepp.
Im Char-Array steht nun "035".
Und obwohl Du nie mit Registern gearbeitet hast, die größer als 4 Bit waren, konntest Du die Zahl in einen String umrechnen.
Wenn Du nun wissen willst, wie Du an den String des nächsten Registers kommst... dann addiere doch die Strings.
Das rechte Register schafft den Wert 16, also "16", dem entspricht der Wert des linken Registers. Brauchst Du nun 3 Register, machst Du einen String und initialisierst ihn mit dem Register-Wert 01: "16".
Nun nimmst Du die Zahl "0F" und addierst den Wert "16" 0F mal drauf, das ergibt den String "256". Und schon kannst Du drei 4 Bit-Register zu Strings verrechnen.
(Optimierungen mit 4 (Bit) mal die Zahl auf sich selbst addieren gehen natürlich auch: "016" << 4 == "016"+"016" << 3 => "032" << 3 == "032"+"032" << 2=> "064" <<2 == "064"+"064" << 1=> "128" << 1 == "128"+"128" << 0 => "256".
Soviel dazu... nun habe ich beim Schreiben des Beitrags doch Ahnung bekommen ^^ Bißerl Phantasie... Computer können nicht alle Probleme lösen, aber das hier geht gerade noch
Dirty Oerti hat geschrieben:Und nein, ich nehme keine shorts, sondern unsigned ints

Warum der Rahmen nur bis 9999 geht? naja, weil 10000 * 10000 = 100000000 = 10^8 , was die größte Zahl 10^x ist, die in einen unsigned int passt.

Lasse ich größere Werte in den einzelnen Speicherfeldern zu, dann riskiere ich einen Überlauf bei der Multiplikation.
Warum nimmst Du die unsigned ints nicht zu zwei unsigned shorts auseinander, wenn Du multiplizierst?
Nehmen wir an, Du hast 8 Bit Register und teilst sie in 4 Bit Register auf, damit Du ohne 16 Bit Register multiplizieren kannst.
20 * 20 => 0001|0100 * 0001|0100 => (0001 << 4) * (0001 << 4) + (0100 << 0) * (0001 << 4) + (0001 << 4) * (0100 << 0) + (0100 << 0) * (0100 << 0)
=> 0001 << 8 + 0100 << 4 + 0100 << 4 + 10000 << 0
=> 0001 << 8 + 0100 << 4 + 0100 << 4 + 0001 << 4
=> 0001 << 8 + 1001 << 4
=> 0001|1001|0000
=> 256 + 128 + 16 => 400.
Dirty Oerti hat geschrieben:Offenbar berücksichtigst das Vorzeichen nicht in der eigentlichen Zahl, sondern getrennt?
Das ist richtig

Denn ich nehme ja unsigned ints (ok, das wäre nicht unbedingt notwendig)
Hauptsächlicher Grund ist jedoch einfach: Es ist einfacher ^^
Ich könnte nat. auch das erste "Arrayfeld" mit dem Vorzeichen behaften, das zwingt mich aber zu Überprüfungen, die jetzt nicht notwendig sind.
Deswegen die getrennte Speicherung von Zahl und Vorzeichen

Verbraucht aber mehr Speicher. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.