Haskell程序 检查阿姆斯特朗数
在Haskell中,我们可以使用列表推导和sum函数来检查给定的数字是否是阿姆斯特朗数。阿姆斯特朗数,也称为自恋数,是这样一些数字,它们的每个数字的立方和与该数字本身相等。
例如,数字153是一个阿姆斯特朗数,因为1^3 + 5^3 + 3^3 = 153。
算法
- 步骤1 - armstrong函数使用列表推导和sum函数计算n的数字的立方和,并定义。
-
步骤2 - 程序的执行将从main函数开始。main()函数具有整个程序的控制权。它被编写为main = do. main函数从用户输入并将其传递给armstrong函数以检查是否为阿姆斯特朗数。如果是,则显示消息“It是阿姆斯特朗数。”,否则显示“它不是阿姆斯特朗数。”。
-
步骤3 - 名为“num”的变量正在初始化。它将保存要检查是否为阿姆斯特朗数的数字。
-
步骤4 - 在调用函数后,使用‘putStrLn’语句将结果打印到控制台。
示例1
在此示例中,armstrong函数将整数n作为输入,并在它是阿姆斯特朗数时返回True,否则返回False。
armstrong函数使用列表推导和sum函数计算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函数使用列表推导和sum函数计算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,编写一个程序来检查给定的数字是否为阿姆斯特朗数。基本思想是将数字转换为字符串,然后将字符串中的每个字符再次转换为整数,最后计算数字的立方和。如果总和等于原始数字,则为阿姆斯特朗数,否则不是。