我正在做另一个 Project Euler 问题 - Problem 38 。 我有这个函数返回一个数字列表,但我需要的是该数字列表是一个数字。它计算整数的串联乘积。
f (a,b) = a*b
conProInt x n = map f (zip (replicate n x) ([1..n]))
prob38 = maximum [ (conProInt (x) (n)) | x <- [100..500], n <- [1..9], (sort $ nub $ (decToList $ (conProInt x n) )) == (sort $ (decToList $ (conProInt x n) )), (sort $ nub $ (decToList $ (conProInt x n))) == [1..9] ]
例如:
conProInt 192 3
返回: [192,384,576]
我需要返回的是: 192384576
我四处搜寻,找不到一个函数,也找不到一个我可以构造的函数来提供我需要的功能。我该怎么办?
编辑:
我已经更新了脚本以合并更快的连接,但它没有返回正确的结果:
f (a,b) = a*b
conProInt x n =( combine (map f (zip (replicate n x) ([1..n]))))
prob38 = maximum [ (conProInt (x) (n)) | x <- [1..50000], n <- [2..40], (sort $ nub $ (decToList $ (conProInt x n) )) == (sort $ (decToList $ (conProInt x n) )), (sort $ nub $ (decToList $ (conProInt x n))) == [1..9] ]
我很确定泛数字测试
(sort $ nub $ (decToList $ (conProInt x n) )) == (sort $ (decToList $ (conProInt x n) )), (sort $ nub $ (decToList $ (conProInt x n))) == [1..9]
不会失败。我试图使搜索尽可能大,但我得到的最大 9-pandigital 是 986315724。有什么建议吗? n 的取值范围是否很大?
最佳答案
通过String
可能是最简单的:
read $ concat $ map (show) [192,384,576]
尽管您可能需要添加类型签名:
Prelude> (read $ concat $ map (show) [192,384,576]) :: Int
192384576
关于haskell - 在haskell中将一系列数字连接成一个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1524499/