Factorials

题目描述:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值