计算整数的持久性数

0 投票
3 回答
2606 浏览
提问于 2025-04-17 05:27

我正在尝试写一个代码,做以下事情:

把一个整数的每一位数字相乘,然后继续这个过程,最终总会得到一个单一的数字,这个结果很让人惊讶。

举个例子:

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 个回答

0

如果你想获取一个数字的每个数字,可以先把这个数字转换成字符串,然后用数组的方式来访问它们。

1

函数是好朋友。

想象一下有一个函数,叫做 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

为了增加分数,确保这个功能也放在一个 -- 有适当名称和文档的 -- 函数里,并考虑使用递归函数,而不是使用循环。

祝你编码愉快。

2

你应该用一个循环,比如 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)

这样你只需要做几次比较,而不是按顺序查找,这样会花费更多时间,时间的长短和范围的长度成正比。

撰写回答