我正在努力学习Haskll,所以我在Haskell中尝试了Project Euler的问题26:http: //projecteuler.net/problem=26
我对这个问题的解决方案是这样的:
answer26 = answer26' 1000
answer26' n = snd $ maximum $ map (\x -> cycleLength x [1]) [2..n - 1]
where
cycleLength n (r:rs)
| i /= Nothing = (1 + fromJust i, n)
| r < n = cycleLength n $ (10*r):r:rs
| otherwise = cycleLength n $ (r `mod` n):r:rs
where i = elemIndex r rs
Run Code Online (Sandbox Code Playgroud)
我意识到这不是最有效的算法,但看到它是天真的O(n ^ 3)(其中n = 1000)不是这样的问题.我关心的是,根据我对monad的理解,他们的主要特性之一是它们在某种意义上"标记"任何使用过monad的东西.功能"fromJust"似乎直接面对它.它为什么存在?另外,假设它的存在是合理的,我在上面的代码中使用它是否很好?
据我所知,C++中的长双重实际上利用了硬件架构(至少对于某些架构而言).Java中的BigDecimal是否为足够小的输入执行此操作?