Integer to RomanNumeral in Haskell 2
ちょっとだけ改善してみたのでまた公開しておく。
コマンドライン引数を一つ受け取って10進数をローマ数字に変換してくれる。
使い方
$ runghc convert.hs 10 #=> X
$ runghc convert.hs 999 #=> DCCCCLXXXXVIIII
convert.hs
import System
import Numeric
main = do cs <- getArgs
let [(n,_)] = readDec $ head cs
putStrLn $ i2r n
old_roman_unit :: Int -> Char
old_roman_unit n
| n == 1000 = 'M'
| n == 500 = 'D'
| n == 100 = 'C'
| n == 50 = 'L'
| n == 10 = 'X'
| n == 5 = 'V'
| n == 1 = 'I'
| otherwise = 'Q'
i2r :: Int -> String
i2r n = i2r2 n [1000, 500, 100, 50, 10, 5, 1]
i2r2 :: Int -> [Int] -> String
i2r2 _ [] = []
i2r2 n (u:us) =
replicate (n `div` u) (old_roman_unit u) ++ i2r2 (n `mod` u) us
Posted in Programming | atom