归一数定义为: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)
def aa(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)
f = open('input.txt', 'r', encoding='utf-8')
t = f.read()
f.close()
t = t.split('\n')
rr = []
for i in t:
r = aa(int(i))
rr.append([i, r])
f1 = open('output.txt', 'w', encoding='utf-8')
for rs in rr:
f1.write(f'{rs[0]}:{rs[1]}')
f1.close()
如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632