簡體   English   中英

如何在 Clean 中檢查數字是否為回文

[英]How to check if a number is palindrome in Clean

我正在解決這個干凈的編程語言的作業; 問題是我們有一個五位數的數字,我們想檢查它是否是奇數回文。 我停留在將數字分成五個獨立數字並與原始數字進行比較以進行回文檢查的階段。 使用 Clean 我無法遍歷數字並檢查它是否從兩側保持不變,所以我正在尋找替代解決方案(一些數學運算)。

代碼塊:

isOddPalindrome :: Int -> Bool
isOddPalindrome a
| isFive a <> 5 = abort("The number should be exactly five digits...")
| (/*==> Here should be the palindrome check <==*/) && (a rem 2 <> 0) = True
| otherwise = False

isFive :: Int -> Int
isFive n
| n / 10 == 0 = 1
= 1 + isFive(n / 10)

我的想法是將數字 append 的數字一位一位地取到一個空列表中,然后在列表上執行reverse方法並檢查它是否相同(回文)

您上面的答案沒有停止條件,因此會導致堆棧溢出。

你可以試試這個

numToList :: Int -> [Int]
numToList n
| n < 10 = [n]
= numToList (n/10) ++ [n rem 10]

Start = numToList 12345

然后就像你在答案中提到的那樣,你可以用'reverse' function 反轉它並檢查它們是否相等。

經過數小時的嘗試找出如何遞歸地將我們的數字添加到空列表后,我做了以下事情:

sepDigits :: Int [Int] -> [Int]
sepDigits n x = sepDigits (n/10) [n rem 10 : x]

現在我可以很容易地檢查反向是否等於初始列表:)那么這個數字就是回文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM