阶乘后有多少个尾随零?

how many trailing zeros after factorial?

提问人:Steve 提问时间:11/19/2019 最后编辑:CommunitySteve 更新时间:11/20/2019 访问量:171

问:

我正在尝试执行此编程任务:

编写一个程序来计算 给定数字的阶乘。

N!= 1 * 2 * 3 * ... * N

小心1000!有 2568 位数字。

有关详细信息,请参阅: http://mathworld.wolfram.com/Factorial.html

例子:

零(6) = 1 -> 6!= 1 * 2 * 3 * 4 * 5 * 6 = 720 --> 1 个尾随零

零(12) = 2 -> 12!= 479001600 --> 2 个尾随零

我很困惑,因为我有一个示例测试显示了这一点:expect_equal(zeros(30), 7)

我可能误解了任务,但是当输入为 30 时,尾随的 7 个零从何而来?

打开科学记数法后,我得到这个:

2.6525286e+32

关闭它后,我得到这个:

265252859812191032282026086406022
r 数学 浮动精度

评论

2赞 Punintended 11/19/2019
提示:在计算时,哪个整数的乘积产生零?那呢?6!12!
1赞 iod 11/19/2019
10摄氏度不能以 22 结尾,因为你已经看过 6 了!以 0 结尾 -- 没有数字可以乘以 720 而不能得到 10 的倍数。所以你得到的结果显然是一个错误,可能是由于浮点十进制和真正的大数字
0赞 MrFlick 11/19/2019
R(和大多数其他编程语言)不对数字使用无限精度。在某些时候,当数字变得足够大时,它们会简单地四舍五入到一个方便的值。计算机的数学出奇地差。您需要创建自己的数据类型,或者使用现有的更大的整数库,或者考虑对这些数字进行因式分解以预测零的数量,而无需实际进行乘法。从这个问题中不清楚问题希望你做哪些技术。我以为这是一道家庭作业题?

答:

0赞 M-- 11/19/2019 #1

你所经历的就是这样的结果:为什么这些数字不相等?

但在这种情况下,计算阶乘以找到尾随零的数量并不是那么有效。

我们可以计算一个数字中 5 个因子的数量(因为总是有足够的 2 个因子与它们配对并创建 10 个因子)。此函数通过计算给定数字中的 5 个因子来为您提供阶乘的尾随零。

tailingzeros_factorial <- function(N){

  mcount = 0L
  mdiv = 5L
  N = as.integer(N)

  while (as.integer((N/mdiv)) > 0L) {

    mcount = mcount +  as.integer(N/mdiv)
    mdiv = as.integer(mdiv * 5L)
  }
  return(mcount)
}
tailingzeros_factorial(6)
 #> 1

tailingzeros_factorial(25)
 #> 6

tailingzeros_factorial(30)
 #> 7