2017-02-19 98 views
-1

我需要創建一個函數,我應該得到N!的最後一個非零數字。Python:從階乘(N)得到最後一個非零元素

以下代碼返回錯誤答案。

def get_last_nonzero_elem(n): 
    if 0 <= n <= 1000000: 
    factorial = reduce(lambda x, y: x * y,[1] + range(1, n+1)) 
    list_factorial = map(int, str(factorial)) 
    for i in reversed(list_factorial): 
     if i != 0: 
      return i 
else: 
    return None 

我在做什麼錯在這裏?

+0

預期輸入與 「錯」 的輸出? – Jarvis

+0

@Jarvis錯誤的輸出 –

+0

@PetrPetrov不,你是什麼人,你會得到什麼? – Roope

回答

0

一旦你的階乘,只是這樣做:

a = str(factorial) 
output = int(a.replace('0', '')[-1]) 

假設你n不是它的階乘太大而無法存儲在int。否則,請使用lists來計算巨大數字的階乘。

0

看到這個代碼:

def fact(n): 
    if n==0: 
      return 1 
    else : 
      return n*fact(n-1) 


x = fact(44) # x =2658271574788448768043625811014615890319638528000000000L 
y=str(x)[::-1] # convert x to string and invers it 
str(int(y))[0] # convert y to int after to string and get the first char 
#8 
0

沒有遞歸限制,低內存佔用,這一個:

from functools import reduce 

def fact(n): 
    if n==0: 
     return 1 
    else : 
     # in python 2 replace range by xrange: 
     return reduce(lambda x, y: x * y, range(1, n+1)) 

def last_non_zero(n): 
    while n: 
     d = n%10 
     if d!=0: 
      return d 
     else: 
      n //= 10 

N = 1000 
f = fact(N) 
print("factorial of {} is : {}".format(N, f)) 
print("last non zero is:", last_non_zero(f))