快樂的數字
描述
編寫一個算法來確定一個數字是否“快樂”。 快樂的數字按照如下方式確定:從一個正整數開始,用其每位數的平方之和取代該數,並重復這個過程,直到最后數字要么收斂等於1且一直等於1,要么將無休止地循環下去且最終不會收斂等於1。能夠最終收斂等於1的數就是快樂的數字。
例如: 19 就是一個快樂的數字,計算過程如下:
- 12 + 92 = 82
- 82 + 22 = 68
- 62 + 82 = 100
- 12 + 02 + 02 = 1
當輸入時快樂的數字時,輸出True,否則輸出False。
示例
輸入:19 輸出:True
題干分析
首先,我們需要得到一個數字,判斷它是幾位數,然后分別取它的每一位數,平方再相加,如此循環下去,直到最后結果為1,輸出True,否則,輸出False。
那么,如果一個數字不是快樂數,它會不會無限循環下去呢?我們可以找幾個數字來試一試。
2:2**2=4;4**2=16;1**2+6**2=37;3**2+7**2=58;5**2+8**2=89;8**2+9**2=145;1**2+4**2+5**2=42;4**2+2**2=20;2**2+0**2=4......
21:2**2+1**2=5;5**2=25;2**2+5**2=29;2**2+9**2=85;8**2+5**2=89;8**2+9**2=145;1**2+4**2+5**2=42;4**2+2**2=20;2**2+0**2=4......
35:3**2+5**2=34;3**2+4**2=25;5**2=25;2**2+5**2=29;2**2+9**2=85;8**2+5**2=89;8**2+9**2=145;1**2+4**2+5**2=42;4**2+2**2=20;2**2+0**2=4......
57:5**2+7**2=74;7**2+4**2=65;6**2+5**2=61;6**2+1**2=37;3**2+7**2=58;5**2+8**2=89;8**2+9**2=145;1**2+4**2+5**2=42;4**2+2**2=20;2**2+0**2=4......
123:1**2+2**2+3**2=14;1**2+4**2=17;1**2+7**2=50;5**2+0**2=25;2**2+5**2=29;2**2+9**2=85;8**2+5**2=89;8**2+9**2=145;1**2+4**2+5**2=42;4**2+2**2=20;2**2+0**2=4......
91:9**2+1**2=82;8**2+2**2=68;6**2+8**2=100;1**2+0**2+0**2=1
由此,我們可以看出,如果是快樂數,那么最后計算的值為1;而不是快樂數,最后計算的結果一定有4。因此可以限定循環的判斷條件為1和4,即當和為1或4時跳出循環,以此來防止無限循環。
代碼及運行結果展示
函數方法
運行結果
異常處理方法
運行結果
這是我目前想到的兩種方法,如果大家還有別的方法,歡迎跟我一起探討!