2017-02-19 8 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)) 
Смежные вопросы