`` Natural To Roman
`` http://www.scriptol.net
`` Public Domain Program
`` Converts a natural number into roman notation
// Requires a Scriptol compiler and a C++ compiler or Php5.
class RomanToDecimal
int PostValue
text PostLetter
int PreValue
text PreLetter
void RomanToDecimal(int a, text b, int c, text d)
PostValue = a
PostLetter = b
PreValue = c
PreLetter = d
return
/class
array RomanConvert
``
`` nat2roman() - Convert a long integer into roman numerals
`` Input: natural value to convert
`` Ouput: roman conversion
``
text nat2roman(natural val)
int place = 0
text result
RomanToDecimal rtd
dyn d
if val > 3999
print val, "too big..."
return null
/if
do
d = RomanConvert[place]
rtd = d.toObject()
int pv = rtd.PostValue
while val >= pv
result + rtd.PostLetter
val - pv
/while
if val >= rtd.PreValue
result + rtd.PreLetter
val - rtd.PreValue
/if
place + 1
/do while val > 0
return result
int main(int argc, array argv)
int value
text roman
dyn d
if argc < 2
print "Natural To Roman - www.scriptol.net"
print "Syntax: roman2 number [number] ..."
exit(0)
/if
RomanConvert.push( RomanToDecimal(1000, "M", 900, "CM"))
RomanConvert.push( RomanToDecimal(500, "D", 400, "CD"))
RomanConvert.push( RomanToDecimal(100, "C", 90, "XC"))
RomanConvert.push( RomanToDecimal(50, "L", 40, "XL"))
RomanConvert.push( RomanToDecimal(10, "X", 9, "IX"))
RomanConvert.push( RomanToDecimal(5, "V", 4, "IV"))
RomanConvert.push( RomanToDecimal(1, "I", 1, "I"))
for int i in 1 -- argc
value = argv[i].toInt()
roman = nat2roman(value)
if roman = null
print "aborted..."
else
print value, "=", roman
/if
/for
return 0
main($argc, $argv)