将八进制转换为二进制

时间:2016-11-14 14:38:17

标签: haskell functional-programming

我在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"

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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