- 论坛徽章:
- 0
|
《ML》 程序设计的一个习题:
书写一个函数来将整数转化成罗马数字表示。输入合适的参数,你的函数应该可以将 1984 表达成 MDCCCCLXXXIIII 或者 MCMLXXXIV.
我只写了后面的一种表示
- local
- val basis=
- [(1000, "M"), (500, "D"), (100, "C"), (50, "L"), (10, "X"), (5, "V"), (1, "I")];
- fun fix "M" = (100, "C")
- | fix "D" = (100, "C")
- | fix "C" = (10, "X")
- | fix "L" = (10, "X")
- | fix "X" = (1, "I")
- | fix "V" = (1,"I")
-
- fun i2r 0 bs = ""
- | i2r x ((v, p)::bs) =
- if (x >= v) then
- p^ (i2r (x-v) ((v, p)::bs))
- else let val t = fix p in
- if v-(#1 t) <= x then
- (#2 t)^p^ (i2r (x-v+(#1 t)) bs)
- else
- i2r x bs
- end;
- in
- fun arabic_to_roman n = i2r n basis;
- end;
复制代码
代码很一般,但重点不在这里。看测试:
- - arabic_to_roman 1984;
- > val it = "MCMLXXXIV" : string
复制代码
对的,再测:
- - arabic_to_roman 3009;
- > val it = "MMMIX" : string
复制代码
啊哈......这个值好象在那里见过。  |
|