当前位置: 首页 > 知识库问答 >
问题:

R:阶乘尾随零的数量

刘子实
2023-03-14

我试图计算给定数字的阶乘中尾随零的数量,例如。,

  • 6!=720,其中1尾随零
  • 10!=3628800,其中2尾随零

我的问题是,我有一个像df这样的数据

    n trail0s
1   1       0
2   2       0
3   3       0
4   4       0
5   5       1
6   6       1
7   7       1
8   8       1
9   9       1
10 10       2

...

我知道R中的阶乘是用来计算阶乘的,但我不知道如何计算尾部的零。任何帮助都将不胜感激!

共有2个答案

司徒杜吟
2023-03-14
> library(stringi)
> x1<- c(1:7)
> x2 <- c(10,20,200,220, 50,300,7000)
> df<- data.frame(x1,x2)
> df$x0trail <- stri_count(df$x2, regex="0") 
> df
  x1   x2 x0trail
1  1   10       1
2  2   20       1
3  3  200       2
4  4  220       1
5  5   50       1
6  6  300       2
7  7 7000       3
富凯旋
2023-03-14

我认为在计算尾随零的数量之前,应该应用阶乘的一些数学性质,请参见https://mathworld.wolfram.com/Factorial.html

在阶乘(n)中,您应该知道尾随零的数量取决于级联乘积中的2*5对*n。在这种情况下,您可以像下面那样定义自定义函数零

zeros <- Vectorize(function(n) ifelse(n>=5,sum(sapply(seq_along(floor(logb(n,5))), function(p) floor(n/5**p) )),0))

然后您可以通过添加尾随零的列

df <- within(df,trail0s <- zeros(n))

这样的

> df
    n trail0s
1   1       0
2   2       0
3   3       0
4   4       0
5   5       1
6   6       1
7   7       1
8   8       1
9   9       1
10 10       2
11 11       2
12 12       2
13 13       2
14 14       2
15 15       3
16 16       3
17 17       3
18 18       3
19 19       3
20 20       4
21 21       4
22 22       4
23 23       4
24 24       4
25 25       5
26 26       5
27 27       5
28 28       5
29 29       5
30 30       6
31 31       6
32 32       6
33 33       6
34 34       6
35 35       7
36 36       7
37 37       7
38 38       7
39 39       7
40 40       8
41 41       8
42 42       8
43 43       8
44 44       8
45 45       9
46 46       9
47 47       9
48 48       9
49 49       9
50 50      10
 类似资料:
  • 我是C编程新手,我想找出给定数的阶乘中尾随零的数量 我尝试计算数字的模,它将返回给定数字的最后一位作为余数,然后将删除最后一个数字。 执行程序后,输出总是将尾随零的数量显示为“0”,如果(ln=!0)条件始终得到满足,即使存在零。

  • 问题内容: 我正在尝试计算阶乘产生的数字的尾随零(这意味着数字变得很大)。以下代码采用一个数字,计算该数字的阶乘,并计算尾随零。但是,当数字大约为25!时,numZeros将不起作用。 我并不担心这段代码的效率,并且我知道有多种方法可以使这段代码的效率更好。我要弄清楚的是为什么计数大于25的数字结尾的零!不管用。 有任何想法吗? 问题答案: 您的任务不是计算阶乘,而是计算零的数量。一个好的解决方案

  • 当我提交给leetcode时,它运行案例500/502,但失败了,原因是:1808548329。但当我在自己的mac上运行它时,它给出了与公认的答案相同的答案。 我的代码: 交流答案是: 它们在我的mac上运行相同的结果: 第一个解决方案之所以不被接受,是因为时间复杂度 (因为我在自己的mac上运行它,但它给出了与ac相同的答案) 如何计算第一个解决方案的时间复杂度, 它是O(NlogN)吗?我不

  • 我试图计算阶乘中尾随零的数量。 我认为尾随零的数量不正确。 使用计数(30)时,30中有7个尾随的0。然而,它正在返回6。

  • 尝试计算给定数字的阶乘中尾随零的数量有点困难。这是Codewars-无法让我的通过的挑战之一。 我想我在这里走错了路,可能还有更优雅的红宝石路。这是我迄今为止所做的。

  • 我试图解决代码战问题,称为:N的尾随零的数量!和哈斯克尔。我知道我不需要计算阶乘来知道尾随零,事实上我只是计算有多少个数字可以被5整除,以及每个数字可以被5整除多少次。我写了两个版本,一个版本在对一个数字进行去噪时使用回忆录,以得到可以被5整除的次数,另一个版本不使用回忆录。令我惊讶的是,假设的DP方法比普通的递归方法耗时更长。我可能在代码中做了一些非常愚蠢的事情。 以下是功能: 我试图记下的是默