【问题标题】:Converting octal to binary八进制转二进制
【发布时间】:2016-11-16 03:29:11
【问题描述】:

我在 Haskell 作业中要做的一件事是编写一个将八进制数转换为二进制数的函数,事情是特别要求输入必须是字符串。

我想我会这样写:

okt2bin:: String -> String
okt2bin n     
       |n == "0" = "000"
       |n == "1" = "001"
       |n == "2" = "010"
       |n == "3" = "011"
       |n == "4" = "100"
       |n == "5" = "101"
       |n == "6" = "110"
       |n == "7" = "111"

问题是,我无法让它适用于多位数字。有人可以帮忙吗?

【问题讨论】:

  • 我认为你的函数应该是Char -> String类型。然后将其用作map 中的基本函数。
  • okts2bins = concatMap (okt2bin.show)
  • 另一个建议,使用模式匹配而不是守卫,还有一件事,你没有考虑负输入。(可能不需要在练习中,但为什么不超越:))跨度>

标签: haskell functional-programming


【解决方案1】:

您可以为单个数字编写一个函数,看起来几乎相同:

octDigit2Bin :: Char -> String
octDigit2Bin n
       |n == '0' = "000"
       |n == '1' = "001"
       |n == '2' = "010"
       |n == '3' = "011"
       |n == '4' = "100"
       |n == '5' = "101"
       |n == '6' = "110"
       |n == '7' = "111"

之后,您可以使用 nice 属性,通过转换每个数字将多位八进制数转换为二进制数,因为 82 的幂,例如“75”可以通过将“7”转化为“111”,将“5”转化为“101”,因此“75”就是“111101”:

okt2bin :: String -> String
okt2bin xs = concatMap octDigit2Bin xs

【讨论】:

  • 谢谢,这样做有帮助。
【解决方案2】:

模块“Numeric”中有处理不同整数编码的函数,它是“base”的一部分。

既然是作业,我猜你的目的是让你计算二进制表示并能够转换任意八进制编码的整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2014-06-10
    • 2015-09-15
    • 2017-09-27
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多