Haskell程式檢查阿姆斯特朗數


在Haskell中,我們可以使用列表推導和求和函式來檢查給定數字是否為阿姆斯特朗數。阿姆斯特朗數,也稱為自戀數,是指其各位數字的立方和等於自身數字的數。

例如,數字153是阿姆斯特朗數,因為1^3 + 5^3 + 3^3 = 153。

演算法

  • 步驟1 − armstrong函式使用列表推導和求和函式計算n的各位數字立方的和,並定義

  • 步驟2 − 程式執行將從main函式開始。main()函式控制整個程式。它被寫成main = do。main函式從使用者處獲取輸入,並將其傳遞給armstrong函式以檢查它是否為阿姆斯特朗數。如果是,則顯示訊息“它是一個阿姆斯特朗數”,否則顯示“它不是一個阿姆斯特朗數”。

  • 步驟3 − 變數名為“num”。它將儲存要檢查是否為阿姆斯特朗數的數字。

  • 步驟4 − 函式呼叫後,使用‘putStrLn’語句將結果列印到控制檯。

示例1

在這個例子中,armstrong函式以整數n作為輸入,如果它是阿姆斯特朗數則返回True,否則返回False。

armstrong函式使用列表推導和求和函式計算n的各位數字立方的和。

armstrong :: Int -> Bool
armstrong n = sum [x^length (show n) | x <- (map (\x -> read [x]) (show n))] == n

main :: IO ()
main = do
   let num = 153
   if armstrong num
      then putStrLn "It is an Armstrong number."
      else putStrLn "It is not an Armstrong number."

輸出

It is an Armstrong number.

示例2

在這個例子中,使用sum和digitToInt函式定義了一個armstrong函式來檢查傳入的數字是否為阿姆斯特朗數。

import Data.Char

armstrong :: Int -> Bool
armstrong n = n == sum [digitToInt x ^ length (show n) | x <- show n]

main :: IO ()
main = do
   let num = 153
   if armstrong num
      then putStrLn "It is an Armstrong number."
      else putStrLn "It is not an Armstrong number."

輸出

It is an Armstrong number.

示例3

在這個例子中,armstrong函式以整數n作為輸入,如果它是阿姆斯特朗數則返回True,否則返回False。

armstrong函式使用列表推導和求和函式計算n的各位數字立方的和。

armstrong :: Int -> Bool
armstrong n = n == sum [x^d | x <- digits n, let d = numberOfDigits n]
   where
      digits n = map (\x -> read [x]) (show n)
      numberOfDigits n = length (show n)

main :: IO ()
main = do
   let num = 153
   if armstrong num
      then putStrLn "It is an Armstrong number."
      else putStrLn "It is not an Armstrong number."

輸出

It is an Armstrong number.

結論

在Haskell中,我們可以編寫一個程式來檢查給定數字是否為阿姆斯特朗數,方法是使用show、map、read、length和sum等函式。基本思路是將數字轉換為字串,然後將字串中的每個字元轉換回整數,最後計算各位數字立方的和。如果和等於原來的數字,則它是一個阿姆斯特朗數,否則不是。

更新於:2023年4月25日

228 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告