题目描述: N的阶乘定义为:N!=N×(N-1)×……×2×1 请编写一个程序,输出N的阶乘的十进制表示中从最末一个非0位开始自低位向高位数的第K位。 现在给你N和K(0<=N<=10000,1<=K<=5),请你输出要求的数字(保证存在)。 例如:N=5,K=2,则输出1 note:(5!=120); N=8,K=3,结果为0 note:(8!=40320)
示例: 输入: N = 777 K = 5 输出:1
分析:
这个给可能是一个数学公式的问题,但是我不想去推导了,就直接用最原始的方式进行一个模拟了。
先是算出阶乘,然后去掉末尾的 0, 最后将数字转化成字符串,直接取索引。如果想控制一下位数也是可以的,因为这里的 k 的 取值范围是 [1, 5] 所以我们只要保存6位就可以了。 多一位关爱,是我的原则。
代码:
1
2
3
4
5
6
7
8
ans = 1
for i in range(1, N+1):
ans *= i
while not ans % 10:
ans //= 10
print(str(ans)[-K])