gpt4 book ai didi

list - 在不使用列表的情况下确定(在 Haskell 中)一个数字是否是回文

转载 作者:行者123 更新时间:2023-12-04 16:17:56 24 4
gpt4 key购买 nike

如果一个四位数字是回文,我需要检查 Haskell,问题是我不能使用列表,尽管有一个固定的数字,我应该使用递归。我一直在思考这个问题,但我无法使用递归得到解决方案。我能得到的最接近的是:

pldrm :: Integer -> Bool
pldrm x
|x > 9999 = False
|x > 999 = (div x 1000 == mod x 10) && (mod (div x 100) 10) == div (mod x 100) 10
|otherwise = False

你有什么主意吗?谢谢

最佳答案

只检查一个数字是否等于它的反转怎么样?

palindrome :: Integer -> Bool
palindrome x = reversal x == x

reversal :: Integral a => a -> a
reversal = go 0
where go a 0 = a
go a b = let (q,r) = b `quotRem` 10 in go (a*10 + r) q

这让负数像 -121是回文,如果您不希望这是真的,这很容易检查。
nonNegativePalindrome x = x >= 0 && palindrome x
reversal给我们与输入相反的数字的整数(忽略 12 == ...000012 中隐含的无限前导零)。
reversal通过从底部剥离数字(使用 quotRemwhich is a lot like divMod )并将它们以相反的顺序放在一起(通过乘法和加法)来工作。
reversal 12345
= go 0 12345
= go 5 1234
= go 54 123
= go 543 12
= go 5432 1
= go 54321 0
= 54321

值得注意的是 n == reversal $ reversal n仅当 n为零或有一个非零的 1 位。 ( reversal (reversal 1200) == 12 ),但是 reversal 范围内的整数都是可逆的: reversal x == reversal (reversal (reversal x))全部 x .

更彻底的解释如何达到这个解决方案 in this blog post .

关于list - 在不使用列表的情况下确定(在 Haskell 中)一个数字是否是回文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26315917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com