Haskell 检查阿姆斯特朗数

Haskell 检查阿姆斯特朗数

在Haskell中,我们可以使用列表推导和sum函数来检查给定的数是否为阿姆斯特朗数。阿姆斯特朗数,也称为自恋数,是指其各个位的立方和等于该数本身的数。

例如,数字153是一个阿姆斯特朗数,因为1^3 + 5^3 + 3^3 = 153。

步骤

  • 步骤1 − “armstrong”函数使用列表推导和sum函数计算数字n的各个位的立方和,并定义如下:

  • 步骤2 − 程序执行将从”main”函数开始。”main()”函数对程序具有整体控制。它被写作main = do。”main”函数从用户接受输入,并将其传递给”armstrong”函数来检查它是否为阿姆斯特朗数。如果是,则显示消息”It is an Armstrong number.”,否则显示”It is not an Armstrong number.”。

  • 步骤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

在这个示例中,定义了一个函数armstrong,使用sum和digitToInt函数来检查传递的数字是否是阿姆斯特朗数字。

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来编写一个程序来检查给定的数字是否是阿姆斯特朗数。基本思想是将数字转换为字符串,然后将字符串中的每个字符转换回整数,最后计算数字的各个位上数字的立方和。如果和原始数字相等,则是阿姆斯特朗数,否则不是。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程