我有两个版本的实现,为什么它们返回不同的结果?
问题陈述,
给定一个整数n,返回n!中的尾随零数。
Java中的源代码,
public class TrailingZero {
public static int trailingZeroes(int n) {
int result = 0;
int base = 5;
while (n/base > 0) {
result += n/base;
base *= 5;
}
return result;
}
public static int trailingZeroesV2(int n) {
return n == 0 ? 0 : n / 5 + trailingZeroes(n / 5);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(trailingZeroes(1808548329));
System.out.println(trailingZeroesV2(1808548329));
}
}
答案 0 :(得分:1)
$filter
乘以5会丢失。
base
(通常递归函数使用额外的参数,)
两种版本的正确性我留给你的聪明才智。 它显然使用因子5中的因子数至少具有相同数量的因子2.所以因子10可以这样确定。
我会考虑public static int trailingZeroesV2(int n) {
return trailingZeroesV2(n, 5);
}
private static int trailingZeroesRec(int n, int base) {
return n == 0 ? 0 : n / base + trailingZeroesRec(n / 5, base * 5);
}
,模5。但我不会认真研究你的算法。