归一数定义为:1)对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和;2)然后重复这个过程直到这个数变为1,也可能是无限循环但始终变不到1(很容易证明这个无限循环中所有的数都不会超过1000);3)如果可以变为1,那么这个数就是归一数。
例如,对于正整数19,有12 + 92 = 82,82 + 22 = 68,62 + 82 = 100,12 + 02 + 02 = 1,所以它是归一数。
100以内的归一数包括1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100。所以第4个归一数是13。
编写程序,读入文本文件input.txt,对每一行进行处理,并将处理结果输出到文本文件output.txt中:1)如果是以问号开头,问号后面的数字是归一数,就输出“Yes”,否则输出“No”;2)如果不是以问号开头,就输出序号是该正整数(假定这个正整数小于10000) 的归一数。
class Solution(object):
def 归一数(self, n):
"""
:type n: int
:rtype: bool
"""
setTemp = []
while True:
sums = 0
while n // 10:
sums += (n % 10) ** 2
n //= 10
sums += (n % 10) ** 2
if sums == 1:
return True
n = sums
# print sums
# print setTemp
if sums in setTemp:
return False
setTemp.append(sums)