快乐数

快乐的数字

描述

编写一个算法来确定一个数字是否“快乐”。 快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛等于1且一直等于1,要么将无休止地循环下去且最终不会收敛等于1。能够最终收敛等于1的数就是快乐的数字。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

例如: 19 就是一个快乐的数字,计算过程如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

  • 12 + 92 = 82
  • 82 + 22 = 68
  • 62 + 82 = 100
  • 12 + 02 + 02 = 1

当输入时快乐的数字时,输出True,否则输出False。

分析题目可知:即将一个数拆开然后计算各数平方和,再拆开计算各数平方和,再拆开计算各数平方和,当最合能得出1则满足快乐数

  也就涉及一个循环:拆开计算各数平方和

  将此步定义为一个方法

def happy(str)://传入数str
  s = 0      //存储平方和
  for i in range(0,len(str))://根据str长度确定循环次数
    s+=int(str[i])**2      //将各位数的平方和累加
    return s

  问题:如若一个数不是快乐数,结果将永远得不到1,并且使程序一直运行

  解决:设置计算次数为1000次,即计算1000次之后还没有得到1,则认为该数不是快乐数

  代码如下:

i = input()            //输入一个数
for m in range(0,1000)://循环1000次   i=str(happy(i)) //计算一次拆开后各数的平方和   if(i == '1'): //若结果i=1,则输出True     print('True')     break   if(i != '1'): //若结果i不为1,则以i为新数来进行下一次循环
print('False')

  

原文地址:https://www.cnblogs.com/yizhixiang/p/11595558.html