如何计算整数乘以部分的次数减少到单个数字

时间:2016-11-16 21:16:51

标签: for-loop math multiplication

说我的输入是39 - 我想正确地遍历这个数字的部分直到最终产品是一个数字(3 * 9 = 27,2 * 7 = 14,1 * 4 = 4 ),并作为输出返回乘以的次数,在本例中为3.

我对循环的基本理解让我进入了第1步,我已经设法使用上面的示例返回27

def times_multiplied(n):
    total = 1
    for i in map(int, str(n)):
        total *= i
    return total

另一个我想减少数量的想法,还没有找到计数,就是添加额外的for循环,但我的直觉说这是太多的代码。我确信Python提供了一个更简单,更优雅的解决方案......

最后,当然,是捕捉倍数的方法,我的直觉也说可能与Counter有关......我不是正面的。

请帮忙!

1 个答案:

答案 0 :(得分:2)

您应该将times_multiplied重命名为multiply_digits,因为它就是这样做的。然后通过循环创建真实times_multiplied,直到结果小于10。如果我能记住我的python,这是一个可能的解决方案:

def multiply_digits(n):
    total = 1
    for i in map(int, str(n)):
        total *= i
    return total

def times_multiplied(n):
    count = 0
    result = n
    while result >= 10:
        count += 1
        result = multiply_digits(result)
    return count

在单一功能中:

def times_multiplied(n):
    count = 0
    result = n
    while result >= 10:
        count += 1
        total = 1
        for i in map(int, str(result)):
            total *= i 
        result = total
    return count