首页 > 解决方案 > 从将数字转换为二进制字符串的 Haskell toBinary 函数中删除前置“0”输出?

问题描述

我是 Haskell 的新手。我的函数应该采用一个整数并将其转换为以 2 为底的字符串。我的代码可以正常工作,但我想从结果中删除“0”。

例如,我想要的 toBinary 16 输出“010000”而不是“10000”。

有人有建议吗?

toBinary :: Integer -> [Char]

toBinary x = if (x == 0) then "0" else toBinary ( div x 2 ) ++ show(mod x 2 )

标签: haskellbinary

解决方案


您需要一个调用递归函数的辅助函数,因为只有一种情况需要在前面加上“0”(当数字为 0 时)。

toBinary' :: Integer -> String
toBinary' 0 = ""
toBinary' x = toBinary' (div x 2) ++ show (mod x 2)

toBinary :: Integer -> String
toBinary 0 = "0"
toBinary x = toBinary' x

推荐阅读