我需要一个程序,我在其中输入一个二进制系统的数字,并返回相同的数字给我在十进制基地。
binToDec :: Integer -> Integer
binToDec 1110101011111111000000111100001010101011110010000001 = 4134096010394753
binToDec 111111111111111111111111111111111111111111111111111111111111111 = 9223372036854775807
我还需要在不到5秒的时间内编译上述示例。
我已经设法做到了这一点,但问题是它从一个整数列表开始:
binToDec l = sum $ map (2^) $ findIndices (==1) $ reverse l
2条答案
按热度按时间wgeznvg71#
给定“decimal”数只包含0和1,我们可以使用 recursion 来实现:
所以我们在这里使用
div i 10
来“将数字1向右移动”。我们使用递归和乘以 * 2 * 来使用二进制表示。我们还使用mod i 10
来获得最后一位数字,然后将其添加到数字中。如前所述,这不是很安全,因为它也会产生
bintodec 10010202010
的数字,在这种情况下,我们可以返回Maybe i
:这就产生了:
但是,最好使用
[Bool]
,因为这将强制我们不能提供不是有效位串的值。在这种情况下,我们可以用途:sauutmhj2#