我需要创建一个函数,我应该得到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 :(得分:0)
一旦得到阶乘,就这样做:
a = str(factorial)
output = int(a.replace('0', '')[-1])
假设您的n
不太大,无法将其因子存储在int
中。否则,使用lists
计算大数的阶乘。
答案 1 :(得分: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
答案 2 :(得分: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))