31 lines
653 B
Plaintext
31 lines
653 B
Plaintext
proc toroman(word n; *char buf) *char:
|
|
*char parts = "M\e\eCM\eD\e\eCD\eC\e\eXC\eL\e\eXL\eX\e\eIX\eV\e\eIV\eI";
|
|
[13]word sizes = (1000,900,500,400,100,90,50,40,10,9,5,4,1);
|
|
channel output text roman;
|
|
word part;
|
|
|
|
open(roman, buf);
|
|
while n > 0 do
|
|
part := 0;
|
|
while sizes[part]>n do part := part+1 od;
|
|
write(roman; parts + 3*part);
|
|
n := n - sizes[part]
|
|
od;
|
|
close(roman);
|
|
buf
|
|
corp
|
|
|
|
proc test(word n) void:
|
|
[32]char buf;
|
|
writeln(n, ": ", toroman(n, &buf[0]))
|
|
corp
|
|
|
|
proc main() void:
|
|
test(1666);
|
|
test(2008);
|
|
test(1001);
|
|
test(1999);
|
|
test(3888);
|
|
test(2025)
|
|
corp
|