题目描述:
The factorial of an integer N, written N!, is the product of all the integers from 1 through N inclusive. The factorial quickly becomes very large: 13! is too large to store in a 32-bit integer on most computers, and 70! is too large for most floating-point variables. Your task is to find the rightmost non-zero digit of n!. For example, 5! = 1 * 2 * 3 * 4 * 5 = 120, so the rightmost non-zero digit of 5! is 2. Likewise, 7! = 1 * 2 * 3 * 4 * 5 * 6 * 7 = 5040, so the rightmost non-zero digit of 7! is 4.
输入输出格式:
INPUT FORMAT
A single positive integer N no larger than 4,220.
SAMPLE INPUT (file fact4.in)
7
OUTPUT FORMAT
A single line containing but a single digit: the right most non-zero digit of N! .
4
题目大意:
求一个数的阶乘最右边非零的那个数字。(需要注意阶乘的数字的值一般很大,比如13!那个数字就超过了int的范围,70!就超过了浮点数的范围)举一个例子:5!=120,最右边那个非零的数字为2,7!为5040,最右边那个非零的数字为4。
解题思路:
个人解题比较简单粗暴,直接用一个递归算法,因为最右边的零不影响运算,所以每一次直接把最右边的零去掉后在来计算,但是我发现一个问题,题目规定的是数字没有超过4220,但是我这种算法用python根本到不了4000,具体原因不详,但是我用c++又能得出结果,所以说这才是最诡异的事情,我先把这个问题记录下来,等日后找出原因再来更新这个问题,解题代码如下:
"""
ID: scwswx2
LANG: PYTHON3
TASK: fact4
"""
import sys
sys.setrecursionlimit(1000000)
def f(num):
if num==1:
return 1
k=f(num-1)*num
while (k%10==0):
k=k/10
return k%10000
fin=open("fact4.in","r")
fout=open("fact4.out","w")
a=int(fin.readline().strip('\n'))
b=int(f(a)%10)
#print(int(b))
fout.write(str(b)+'\n')
fout.closed