数字的乘积作为一位数字

时间:2017-11-30 04:42:18

标签: python python-2.7 numpy

我正在尝试计算非零数字的乘积, 直到结果是一位数字。例如,数字512983是2,因为5×1×2×9×8×3 = 2160和2×1×6 = 12(注意省略零位)和1×2 = 2.但每次我跑这个我只得到0

    def prod_digits(n):
        a = 1
        for each in str(n):
            a = a * int(each)
        return a

    prod_digits(123)

3 个答案:

答案 0 :(得分:1)

试试这个:

def prod_digits(n):
    a = 1
    for each in str(n):
        if each is not '0':
            a = a * int(each)
    return a

a = 123
while (a > 10):
    a = prod_digits(a)

print a

答案 1 :(得分:0)

您的代码存在多个问题

  1. 由于a的初始值为0,因此任何后续乘法都会给出0.将其更改为1.
  2. 您的函数需要递归调用,直到函数的参数为​​单个数字。
  3. 您需要在乘以数字时忽略0。

答案 2 :(得分:0)

或者您可以使用functools中的reduce函数:

from functools import reduce

def compute_nz_product(n):
    digits = [int(c) for c in str(n) if c is not '0']
    result = reduce(lambda x, y: x*y, digits)
    if result < 10:
        return result
    else:
        return compute_nz_product(result)

print(compute_nz_product(512983))

输出:

2