RosettaCodeData/Task/Roman-numerals-Encode/BCPL/roman-numerals-encode.bcpl

43 lines
925 B
Plaintext

get "libhdr"
let toroman(n, v) = valof
$( let extract(n, val, rmn, v) = valof
$( while n >= val
$( n := n - val;
for i=1 to rmn%0 do v%(v%0+i) := rmn%i
v%0 := v%0 + rmn%0
$)
resultis n
$)
v%0 := 0
n := extract(n, 1000, "M", v)
n := extract(n, 900, "CM", v)
n := extract(n, 500, "D", v)
n := extract(n, 400, "CD", v)
n := extract(n, 100, "C", v)
n := extract(n, 90, "XC", v)
n := extract(n, 50, "L", v)
n := extract(n, 40, "XL", v)
n := extract(n, 10, "X", v)
n := extract(n, 9, "IX", v)
n := extract(n, 5, "V", v)
n := extract(n, 4, "IV", v)
n := extract(n, 1, "I", v)
resultis v
$)
let show(n) be
$( let v = vec 50
writef("%I4 = %S*N", n, toroman(n, v))
$)
let start() be
$( show(1666)
show(2008)
show(1001)
show(1999)
show(3888)
show(2021)
$)