Haskell 程序检查输入数字是否为回文数


本教程讨论编写一个程序,以检查输入数字在 Haskell 编程语言中是否为回文数。

当数字在反转数字后得到相同的数字时,可以将其称为回文数。例如,数字 12321 是一个回文数,因为在反转数字后它得到相同的数字。

在本教程中,我们将看到:

  • 使用字符串反转函数检查输入数字是否为回文数的程序。

  • 使用递归函数检查输入数字是否为回文数的程序。

方法 1:使用字符串反转函数检查回文数

算法步骤

  • 我们声明了一个名为 isPalindrome 的函数,它接受一个整数作为参数并返回一个布尔值。

  • 使用“Where”关键字在多个语句中表达逻辑

  • 使用 show 函数将数字转换为字符串,并且

  • 使用 reverse 函数反转字符串

  • 比较两个字符串

  • 根据比较得到的布尔表达式打印结果

示例

-- function declaration
isPalindrome :: Int->Bool

-- function definition
isPalindrome n = (n == k)
   where
-- Converting integer to string using function show
   nStr = reverse (show n)
-- Converting string to an integer using function read
   k = (read nStr :: Int)

main :: IO()
main = do
-- initializing variable num
   let num = 12321
-- invoking the function isPalindrome
   let status = isPalindrome num
-- printing the status
   if(status==True)
      then print ("The number " ++ show num ++ " is a palindrome")
   else print ("The number " ++ show num ++ " is not a palindrome")

输出

"The number 12321 is a palindrome"

方法 2:使用字符串递归函数检查回文数

算法

  • 我们声明了一个名为 isPalindrome 的函数,它接受三个整数参数并返回一个布尔值。

  • 创建一个 main 函数并定义一个值来检查它是否为回文数。

  • 在 main 函数中初始化 Palendrom 函数指向定义的数字。

  • 根据 Palendrom 函数得到的布尔表达式打印结果。

示例

使用递归函数检查输入数字是否为回文数的程序

-- function declaration
isPalindrome :: Int->Int->Int->Bool
-- function definition
isPalindrome num a revNum = if(a==0)
   then if (revNum == num)
      then True
      else False
   else k
      where
      d = mod a 10
      newRevNum = revNum*10 + d
      newA = div a 10
      k = isPalindrome num newA newRevNum
 
main :: IO()
main = do
-- initializing variable num
   let num = 1256521
-- invoking the function isPalindrome
   let status = isPalindrome num num 0
-- printing the status
   if(status==True)
      then print ("The number " ++ show num ++ " is a palindrome")
   else print ("The number " ++ show num ++ " is not a palindrome")

输出

"The number 1256521 is a palindrome"

结论

在本教程中,我们讨论了两种在 Haskell 编程语言中实现检查数字是否为回文数的程序的方法。

更新于: 2022-12-15

451 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告