使用函式顯示區間內阿姆斯特朗數的Haskell程式


Haskell擁有高階函式和filter函式等,可用於獲取兩個給定區間之間的阿姆斯特朗數。在第一個示例中,我們將使用(isArmstrong和armstrongInRange函式與高階函式),在第二個示例中,我們將使用(filter isArmstrong [a..b])函式。

演算法

  • 步驟1 − 定義使用者自定義的isArmstrong函式。

  • 步驟2 − 程式執行將從main函式開始。main()函式控制整個程式。它被編寫為main = do。

  • 步驟3 − 初始化名為“lower”和“upper”的變數。它將儲存要列印阿姆斯特朗數的範圍。

  • 步驟4 − 函式呼叫後,使用‘print’函式將定義範圍內的阿姆斯特朗數列印到控制檯。

示例1

在這個例子中,我們將看到如何使用高階函式顯示兩個區間之間的阿姆斯特朗數。

import Data.List (find)

isArmstrong :: Integer -> Bool
isArmstrong n = n == sum (map (^ len) digits)
   where
      digits = map (\x -> read [x] :: Integer) (show n)
      len = length digits

armstrongInRange'''' :: Integer -> Integer -> [Integer]
armstrongInRange'''' a b = filter (\x -> x == sum (map (^ (length (show x))) (map (\x -> read [x] :: Integer) (show x)))) [a..b]

main :: IO ()
main = do
let lower = 100
let upper = 1000
print (armstrongInRange'''' lower upper)

輸出

[153,370,371,407]

示例2

在這個例子中,我們將看到如何使用filter函式顯示兩個區間之間的阿姆斯特朗數。

import Data.List (find)

isArmstrong :: Integer -> Bool
isArmstrong n = n == sum (map (^ len) digits)
   where
      digits = map (\x -> read [x] :: Integer) (show n)
      len = length digits

armstrongInRange' :: Integer -> Integer -> [Integer]
armstrongInRange' a b = filter isArmstrong [a..b]

main :: IO ()
main = do
let lower = 100
let upper = 1000
print (armstrongInRange' lower upper)

輸出

[153,370,371,407]

結論

阿姆斯特朗數相對較少,只存在於較小的數字中。它們以Michael F. Armstrong的名字命名,他被認為是發現它們的人。

在Haskell中,要顯示區間內的阿姆斯特朗數,我們可以使用高階函式和filter函式。

更新於:2023年3月13日

122次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告