使用Python判断一个正整数在十进制下是不是“快乐数”
快乐数(happy number)有以下的特性:在给定的进位制下,该数字所有数位(digits)的平方和,得到的新数再次求所有数位的平方和,如此重复进行,最终结果必为1。
def sum_of_square(n):
s = 0
while n >= 10:
s += (n % 10) * (n % 10)
n = n//10
else:
s += n * n
return s
def is_happy_number(n):
ever = set() # 构造一个字典记录所有中间计算出现的数
while True:
if n == 1: # 满足条件
return True, ever
elif n in ever: # 计算的数曾经出现过,表式出现了死循环
return False, ever
else: # 未出现死循环,且数值不为1,继续计算过程
ever.add(n)
n = sum_of_square(n)
if __name__ == '__main__':
while True:
number = int(input('输入一个正整数(输入非整数结束):')) # 读取需要测试的数
if number < 1:
break
print(is_happy_number(number))
assert sum_of_square(1) == 1
assert sum_of_square(2) == 4
assert sum_of_square(123) == 14
assert is_happy_number(1)[0] is True
assert is_happy_number(11)[0] is not True