返回不同的结果以找到Factorial Trailing Zero

时间:2017-03-12 22:38:09

标签: java algorithm

我有两个版本的实现,为什么它们返回不同的结果?

问题陈述

给定一个整数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));
    }

}

1 个答案:

答案 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。但我不会认真研究你的算法。