计算整数的持久性数
我正在尝试写一个代码,做以下事情:
把一个整数的每一位数字相乘,然后继续这个过程,最终总会得到一个单一的数字,这个结果很让人惊讶。
举个例子:
715 -> 35 -> 15 -> 5 88 -> 64 -> 24 -> 8 27 -> 14 -> 4
为了得到这个单一数字所需的乘积次数,称为这个整数的持久性数字。因此,715和88的持久性数字都是3,而27的持久性数字是2。请写一个程序,找出唯一一个持久性数字大于3的两位数。
我想出了一个大概的思路,下面是我的代码,但似乎不太好用:
num2=0
num3=0
num4=0
num=input("what is your number?")
while num in range(10,100):
print 'step1'
num1=num%10*num/10
if num1-10>10:
print 'step2'
num2=num1%10*num1/10
elif num2-num1>10:
print 'step3'
num3=num2%10*num2/10
elif num3-num2>10:
print 'step4'
num4=num3%10*num3/10
elif num4-num3>10:
print 'step5'
print num4
else:
break
这个程序是用Python写的,我就是搞不明白。如果有人能帮我,我会非常感激!
3 个回答
如果你想获取一个数字的每个数字,可以先把这个数字转换成字符串,然后用数组的方式来访问它们。
函数是好朋友。
想象一下有一个函数,叫做 getEnds(x)
,当你给它一个整数 x
时,它会提取这个数字的第一个数字和最后一个数字(都是整数),然后把结果以元组的形式返回,像这样 (first_digit, last_digit)
。如果 x
是一个一位数的数字,那么返回的元组里就只有一个元素,形式是 (x)
;如果是多位数,就会有两个元素。(一种简单的方法是把这个数字变成字符串,提取第一个和最后一个数字作为字符串,然后再把这些字符串转换回数字……不过有很多方法可以做到这一点:只要确保遵循函数的约定,正如上面所说的,以及希望在函数的文档中也能看到。)
接下来,n
是我们正在寻找持久性的当前数字:
ends = getEnds(n)
while ends contains two elements
n = first element of ends times second element of ends
ends = getEnds(n)
# while terminates when ends contained only one element
# now it's only a matter of "counting" the persistence
为了增加分数,确保这个功能也放在一个 -- 有适当名称和文档的 -- 函数里,并考虑使用递归函数,而不是使用循环。
祝你编码愉快。
你应该用一个循环,比如 while 循环或者 for 循环,来乘法运算每个数字,而不是直接写死对第一个、第二个数字该怎么做。
用伪代码来说就是...
productSoFar = 1
digitsLeftToMultipy = #the number
while there are digits left to multiply:
get the next digit and
update produtsSoFar and digitsLeftToMultiply
另外,使用
10 <= n < 100
而不是
n in range(10, 100)
这样你只需要做几次比较,而不是按顺序查找,这样会花费更多时间,时间的长短和范围的长度成正比。