Python,计算因子

时间:2016-11-16 22:50:47

标签: python factorial

我正在尝试计算阶乘中的尾随零数。

def count(x):
    zeros = 0                     
    for i in range (2,x+1): 
        print(i)
        if x > 0:
            if i % 5 == 0:       
                print("count")    
                zeros +=1       
        else:
            ("False")
    print(zeros)        

count(30)

我认为尾随零的数量不正确。

使用count(30)时,30中有7个尾随0。但它返回6。

4 个答案:

答案 0 :(得分:4)

def count (x):
    i = 5
    zeros = 0
    while x >= i:
        zeros += x // i
        i *= 5
    return zeros

print(count(30))

答案 1 :(得分:3)

维基百科在这一特定主题上有一个short article,它表示这可以通过计算因数为5的直接求和来计算。

def trailing_zeros_of_factorial(n):
    assert n >= 0, n
    zeros = 0
    q = n

    while q:
        q //= 5
        zeros += q

    return zeros

# 32! = 263130836933693530167218012160000000
print(trailing_zeros_of_factorial(32)) # => 7

答案 2 :(得分:1)

我们将首先计算1和n之间的5的倍数(即X),然后计算25的倍数(〜s),然后是125,依此类推。 要计算n中母马的倍数,我们可以将n除以m

def countFactZeros(num):
    count = 0
    i = 5
    if num < 0:
        return False
    while num//i > 0:
        count = count + num//i
        i = i * 5
    return count

countFactZeros(10) # output should be 2
countFactZeros(100) # output should be 24

答案 3 :(得分:0)

您的算法存在问题:

Select h.holderidentitykey, e.*
  From @holder As h
  Join Employees As e 
    On h.FirstName = e.FirstName
    Or h.lastname = e.LastName
  Where iif(h.firstname = e.firstname, 1, 0) +
        iif(h.lastname = e.LastName, 1, 0) +
        iif((h.city = e.City AND h.stateabbr = e.Region) OR h.zip = e.PostalCode, 1, 0) +
        iif(h.homephone = e.HomePhone, 1, 0) +
        iif(h.extension = e.Extension, 1, 0) >= 4;