009
28.09.2003, 15:15 Uhr
0xdeadbeef
Gott (Operator)
|
Naja, das ist aber schon ziemlich umständlich. Für die arabisch->römisch-Konversion würde ich mir die Strings und korrespondierenden Werte in Arrays aufbewahren und entsprechend zusammenschustern. Du musst auch nicht zwischen if und while unterscheiden, weil in dem Moment, in dem die Bedingung nur einmal wahr sein kann, while dasselbe wie if macht. Wenn wir schon dabei sind, Code zu posten:
C++: |
#include <string> std::string arab2roman(int x) { if(x < 1 || x > 3999) throw(x); //nicht darstellbar
static const char *rom_strings[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }; static const int rom_values[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; std::string ret; for(int i = 0; x != 0; ++i) while(x >= rom_values[i]) { x -= rom_values[i]; ret += rom_strings[i]; }
return ret; }
|
Ist jetzt grad mal so hingekladdet, ich denke, das Prinzip wird klar. Die andere Konversion kann man unter denselben Gesichtspunkten verkürzen, aber das wird als Aufgabe für den Leser gelassen -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |