module Main where import System.IO {- hexDigit :: Int -> String hexDigit 0 = "0" hexDigit 1 = "1" hexDigit 2 = "2" hexDigit 3 = "3" hexDigit 4 = "4" hexDigit 5 = "5" hexDigit 6 = "6" hexDigit 7 = "7" hexDigit 8 = "8" hexDigit 9 = "9" hexDigit 10 = "A" hexDigit 11 = "B" hexDigit 12 = "C" hexDigit 13 = "D" hexDigit 14 = "E" hexDigit 15 = "F" -} {- int2hex :: Int -> String int2hex 0 = "" int2hex i = int2hex (i `div` 16) ++ hexDigit (i `mod` 16) -} {- int2hex :: Int -> String int2hex i = int2hex' i True where int2hex' 0 True = "0" int2hex' 0 False = "" int2hex' i _ = int2hex' (i `div` 16) False ++ hexDigit (i `mod` 16) -} digit r i | r < 37 = if (i < 10) then show i else [(toEnum (i + 55))::Char] | otherwise = "(" ++ (show i) ++ ")" convert :: Int -> Int -> String convert _ 0 = "" convert r i = convert r (i `div` r) ++ digit r (i `mod` r) {- convert :: Int -> Int -> String convert r i = convert' r i True where convert' _ 0 True = "0" convert' _ 0 False = "" convert' r i _ = convert' r (i `div` r) False ++ digit r (i `mod` r) -} convert' :: Int -> Int -> String convert' r i = convert_a r i "" where convert_a _ 0 result = result convert_a r i result = convert_a r (i `div` r) (digit r (i `mod` r) ++ result) int2bin = convert 2 int2oct = convert 8 int2hex = convert 16 main :: IO () main = putStr $ convert' 2 14 {- main :: IO () main = do hSetBuffering stdout NoBuffering putStr "Input radix (0 for exit): " r <- getLine if (r == "0") then return () else do putStr "Input number to convert: " i <- getLine putStrLn $ show $ convert' (read r) (read i) main -}