Haskell程式:檢查輸入數字是否為Neon數
本教程將討論編寫一個Haskell程式來檢查輸入數字是否為Neon數。Haskell中的計算是數學函式。Neon數是指滿足以下性質的數字:數字等於其平方數的各位數字之和。例如:9是一個Neon數,因為其平方數“81”的各位數字之和 (8+1) 等於9。
在本教程中,我們將討論
程式:檢查數字是否為Neon數。
程式:以迭代方式列印一定範圍內的Neon數。
程式:以遞迴方式列印一定範圍內的Neon數。
演算法步驟
宣告一個變數並用要檢查的數字填充它。
實現邏輯以檢查數字是否為Neon數。
列印結果。
查詢數字是否為Neon數
示例
程式:檢查數字是否為Neon數
-- 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`,並列印了結果。
以迭代方式查詢給定範圍內的Neon數
示例
程式:以迭代方式生成給定範圍內的Neon數
-- 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`,如果數字實際上是Neon數,則返回`true`,否則返回`false`。
在主函式中,我們宣告並初始化了上限和下限變數。
我們使用列表推導式生成給定範圍內的所有數字,並檢查數字是否為Neon數。
最後,我們列印了結果。
以遞迴方式查詢給定範圍內的Neon數
示例
程式:以遞迴方式生成給定範圍內的Neon數
-- 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`,如果數字實際上是Neon數,則返回`true`,否則返回`false`。
我們聲明瞭一個函式`generateNeon`,它接收兩個整數作為引數並返回一個整數列表。在其函式定義中,我們接收兩個整數`lower`和`upper`作為引數。如果`upper`小於`lower`,我們返回空列表;否則,我們檢查`upper`數字是否為Neon數。如果它是Neon數,我們將遞迴呼叫的函式返回的列表與`upper`數字連線起來。如果`upper`數字不是Neon數,我們只返回帶有引數`lower`和`(upper-1)`的遞迴呼叫。該函式的邏輯是從`upper`到`lower`迭代,並檢查`upper`數字是否為Neon數。如果是Neon數,我們將連線並返回列表。
在主函式中,我們宣告並初始化了上限和下限數字變數。最後,我們呼叫了函式`generateNeon`並列印了輸出。
結論
在本教程中,我們學習瞭如何編寫一個Haskell程式來檢查給定數字是否為Neon數,以及如何實現一個程式來生成給定範圍內的所有Neon數。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP