将一个正整数所有数字的平方相加可得到一个新的数,不断重复这个过程直到新的数已 经在之前出现过,这样构成了一条数字链。 例如:
1->1
89->145->42->20->4->16->37->58->89
理论上证明了从任一正整数开始,平方和数字链最终都会到达1或89,因此寻找某正整数的平方和数字链到1或89即可。
自定义函数numsChain(num),寻找从num到1或89的平方和数字链中的所有数并将结果返回。主模块中从键盘输入一个数字字符串(正整数),调用numsChain()函数寻找并输出完整的平方和数字链。
输入
一个数值型数据
输出
数字链
样例输入
23
样例输出
23->13->10->1
n=int(input())
def f(x):
a=0
for i in str(x):
a+=int(i)**2
return a
def numsChain(n):
t=[n]
while t[-1]!=89 and t[-1]!=1:
t.append(f(t[-1]))
for i in range(len(t)-1):
print(t[i],end='->')
print(t[-1])
numsChain(n)
你的采纳对我很有帮助!
def divide_num(num):
s=0
while num>0:
s+=(num%10)**2
num//=10
return s
def numsChain(num):
ans=[num]
num=divide_num(num)
ans.append(num)
while num!=ans[0]:
num=divide_num(num)
ans.append(num)
if ans[-1]==1:
break
print('->'.join([str(i) for i in ans]))