Integer to RomanNumeral in Haskell 2

Posted by okkez Wed, 06 Jun 2007 12:16:00 GMT

ちょっとだけ改善してみたのでまた公開しておく。

コマンドライン引数を一つ受け取って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 | タグ | atom