【发布时间】:2019-02-11 16:18:56
【问题描述】:
这段代码无法编译:
public int trailingZeroes(int n) {
return IntStream.rangeClosed(1,n)
.filter(e -> (e % 5) == 0)
.count();
}
我注意到IntStream 的返回类型存在这种差异
方法:
int sum() 与 long count()
在尝试从上面的计数操作中返回 int 类型时,
我已经明白为什么
count()返回一个 long 但为什么有sum()返回比count()更窄的返回类型?在我的
trailingZeroes方法中实现我想要实现的目标的最佳方法是什么?
【问题讨论】:
-
这个方法不就是在做
(int) n / 5吗? -
@jbx 不,不一定。它目前将计算所有小于 N 且可被 5 整除的数字。除此之外:这似乎更像是一个数学问题,用于计算数字中尾随的零的数量。但是,如果我没记错的话,那曾经是(n/5 + n/25 + n/125 ....)。只有 OP 可以分享详细信息。
-
@nullpointer OP 所做的只是取可被 5 整除且没有余数的范围内的数字,因此将其除以 5 并删除小数部分将得到相同的结果。范围是封闭的,所以数字小于或等于 N。(如果不是,它只是
(int) (n - 1) / 5)。它从 1 开始(甚至可以从 5 开始,结果是一样的)。 -
@jbx 是的,我明白你现在的意思了,我真的认为该方法的名称及其作用在这里具有误导性。在做出的回答中提出了更好的实施方案。
-
@nullpointer 是的,看到了。也启发了我一个递归的:)
标签: java java-stream reduction