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 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告