int - > [int]转换

时间:2010-10-21 15:40:30

标签: haskell

  

可能重复:
  Split a number into its digits with Haskell

如何将整数转换为整数列表 例子:输入:1234输出:[1,2,3,4]任何关于这个问题的想法?

6 个答案:

答案 0 :(得分:9)

这听起来像是家庭作业。这是一个你应该能够在Haskell中应用的通用算法:

  1. 将整数转换为字符串。
  2. 逐个字符地逐字符号。
  3. 将每个字符转换回整数,同时将其附加到列表的末尾。
  4. 祝你好运。

答案 1 :(得分:8)

  

解决方案:

digs 0 = []
digs x = digs (x `div` 10) ++ [x `mod` 10]

来源:link

答案 2 :(得分:4)

使用整数运算:

digits' 0 = []
digits' n = n `rem` 10 : digits (n `quot` 10)
digits n = reverse (digits' n)

答案 3 :(得分:3)

这个非常简单的解决方案呢?

import Data.Char (digitToInt)

int2intList :: Integral i => i -> [Int]
int2intList s = map digitToInt $ show s

main = print $ int2intList 12351234999123123123

给出[1,2,3,5,1,2,3,4,9,9,9,1,2,3,1,2,3,1,2,3]

这个是可能的,也更普遍:

int2intList :: (Read i, Integral i) => i -> [i]
int2intList s = map (read.(:[])) $ show s

main = print $ int2intList 12351234999123123123

答案 4 :(得分:1)

使用unfoldr的替代解决方案:

import List
digits = reverse . unfoldr nextDigit
        where nextDigit 0 = Nothing
              nextDigit x = Just (r, q) where (q, r) = quotRem x 10

答案 5 :(得分:0)

jleedev:

我用divMod做了类似的事情。我不知道quotRem存在!

import Data.List ( unfoldr )

listify :: Integer -> [Integer]
listify = reverse . unfoldr f
   where
      f i = case divMod i 10 of
         (0, 0) -> Nothing
         (w, r) -> Just (r, w)