#11: "Rechnen einmal anders"
Typ: Kürze des Codes
Deadline: 18.01.2009
Abgabe: contest@spieleprogrammierer.de
Bitte beachten:
- Ablauf und Regeln
Aufgabenstellung:
Wie rechnet eigentlich ein Computer mit Zahlen, wo er doch nur Einsen und Nullen kennt? Dies ist das Thema dieses Contests.
Ihr sollt eine Funktion schreiben, die zwei 16-Bit-Integer mit Vorzeichen (int16_t) addiert, subtrahiert, multipliziert oder dividiert,
ohne die Operatoren +, - (unär und binär), *, /, +=, -=, *=, /=, ++ und -- zu benutzen. Das gilt auch für Zählervariablen in for-Schleifen o.Ä.
Die Funktion muss genau so rechnen wie die normalen Operatoren. Geschwindigkeit spielt keine Rolle.
Die Funktion darf sich selbst aufrufen, um zum Beispiel die Multiplikation mit Hilfe der Addition auszuführen.
Divisionen durch Null kommen nicht vor.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
|
enum Operation
{
ADD,
SUBTRACT,
MULTIPLY,
DIVIDE
};
int16_t calculate(Operation op, int16_t x, int16_t y);
|
Ein paar Beispiele:
calculate(ADD, 10, 32) liefert 42.
calculate(SUBTRACT, 5, 11) liefert -6.
calculate(MULTIPLY, 100, 0) liefert 0.
calculate(DIVIDE, 10, -6) liefert -1.
Weitere Bedingungen:
- Verwenden der Standardbibliothek ist verboten.
- Natürlich ist es nicht erlaubt, die Ergebnisse im Vorhinein zu berechnen und dann aus einer Tabelle o.Ä. zu holen.
Paket hier herunterladen
Das Paket besteht aus dem Quelltext der Testumgebung, Code::Blocks-Projekt, Visual Studio-Projekt und Token-Counter.
Ein paar Links:
-
Binärzahl
-
Zweierkomplement
-
Volladdierer
Viel Spaß und viel Erfolg!