求问一道python题目

归一数定义为: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