Haskell 程序检查输入数字是否为霓虹数字

haskellserver side programmingprogramming

本教程将讨论使用 Haskell 编程语言编写程序来检查输入数字是否为霓虹数字。Haskell 中的计算是数学函数。霓虹数字是满足以下属性的数字:数字等于其平方数字之和。例如:9 是一个霓虹数字,因为它的平方数"81"(8+1)的数字之和等于数字 9。

在本教程中,我们将讨论

  • 程序检查数字是否为霓虹数字。

  • 程序以迭代方式打印一定范围内的霓虹数字。

  • 程序以递归方式打印一定范围内的霓虹数字。

算法步骤

  • 声明一个变量并用您要检查的数字填充它。

  • 实现逻辑以检查数字是否为霓虹数字。

  • 打印结果。

判断某个数字是否为霓虹数字

示例

检查某个数字是否为霓虹数字的程序

-- function declaration for sumDigit function sumDigit :: Int->Int -- function definition for base condition sumDigit 0 = 0 -- function definition for all other cases sumDigit num = mod num 10 + sumDigit (div num 10) -- function declaration for isNeon function isNeon :: Int->Bool -- function definition for isNeon function isNeon num = num == (sumDigit (num*num)) -- main function main = do -- declaring and populating variable with a number let num = 9 -- invoking the isNeon function and printing the result print (isNeon 9)

输出

True

在上述程序中,

我们声明了一个辅助函数 sumDigit,它接受一个整数作为输入并返回整数。

使用基本条件定义了辅助函数 sumDigit,如果参数为零,函数则返回零。

通过使用对参数为"number/10"的相同函数的递归调用,将余数添加到要返回的值中,直到参数等于零,为其他情况定义了该函数。

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

我们定义函数 isNeon 是因为它将数字与函数 sumDigit 使用参数number^2 返回的值进行比较。如果两者相等,函数返回 True,否则函数返回 False。

在主函数中,我们声明并填充了一个变量 num。

我们调用 Neon 函数,参数为 num,并打印结果。

以迭代方式在给定范围内查找霓虹灯数字

示例

以迭代方式生成给定范围内的霓虹灯数字的程序

-- function declaration and definition for sumDigit function sumDigit :: Int->Int sumDigit 0 = 0 sumDigit num = mod num 10 + sumDigit (div num 10) -- Function declaration and definition for isNeon function isNeon :: Int->Bool isNeon num = num == (sumDigit (num*num)) main = do -- declaring and initializing upper and lower bounds with values let lower = 1 let upper = 100 -- list comprehension to generate Neon numbers in a range let list = [x | x <- [lower..upper], isNeon x] print (list)

输出

[1,9]

在上述程序中

我们声明并定义了一个辅助函数 sumDigit,与上一个程序相同

我们声明并定义了函数 isNeon,如果数字实际上是霓虹灯数字,则返回 true,否则返回 false。

在主函数中,我们声明并初始化了上限和下限的变量。

我们使用列表推导来生成给定范围内的所有数字并检查数字是否为霓虹灯。

最后我们打印了结果。

以递归方式在给定范围内查找霓虹灯数字

示例

以递归方式生成给定范围内的霓虹灯数字的程序

-- function declaration for sumDigit function sumDigit :: Int->Int -- function definition for sumDigit function sumDigit 0 = 0 sumDigit num = mod num 10 + sumDigit (div num 10) -- function declaration and definition for isNeon function isNeon :: Int->Bool isNeon num = num == (sumDigit (num*num)) -- function declaration for generateNeon function generateNeon :: Int->Int->[Int] -- function definition for generateNeon function generateNeon lower upper = if (upper<lower) then [] else if(isNeon upper) then generateNeon lower (upper-1) ++ [upper] else generateNeon lower (upper-1) main = do -- declaring and initializing variable for lower and upper bounds let lower = 1 let upper = 100 print (generateNeon lower upper)

输出

[1,9]

在上述程序中,

我们声明并定义了一个辅助函数 sumDigit,与上一个程序相同。

我们声明并定义了函数 isNeon,如果数字实际上是霓虹数字,则返回 true,否则返回 false。

我们声明了一个函数 generateNeon,它接受两个整数作为参数并返回一个整数列表。在其函数定义中,我们将两个整数 lower 和 upper 作为参数。如果 upper 小于 lower,则返回空列表,否则检查 upper 数字是否为 Neon。如果它是 Neon 数字,则将递归调用函数返回的列表连接到 upper 数字。如果 upper 数字不是 Neon 数字,则我们仅返回带有参数 lower 和 (upper-1) 的递归调用。逻辑是该函数通过检查 upper 数字是否为 Neon 从 upper 迭代到 lower。如果它是霓虹数字,我们将连接并返回列表。

在主函数中,我们声明并初始化了上限和下限数字的变量。最后,我们调用函数generateNeon并打印输出。

结论

在本教程中,我们学习了编写一个程序来检查给定数字是否是Haskell中的霓虹数字。并实现一个程序来生成给定范围内的所有霓虹数字。


相关文章