【问题标题】:Trailing Number of Zeros wrong answer on SPOJ (JAVA)SPOJ(JAVA)上的尾随零错误答案
【发布时间】:2015-12-09 12:21:10
【问题描述】:

今天我尝试解决 SPOJ (link) 上的“阶乘”问题,它看起来很简单尾随零点数算法,但我一直在 SPOJ 上得到“错误答案”。

算法非常简单,适用于所有测试(来自 SPOJ、其他来源和我手动创建的所有内容),但在 0.99 秒后出现“错误答案”...

这是我的代码:

public static int ZeroCount (int num)
{
    int zeros = 0;
    for (int i =5; i < num; i*=5)
        zeros = zeros + (int)Math.floor(num/i);
    return zeros;
}

public static void main(String[] args) throws java.lang.Exception {
    Scanner reader = new Scanner(System.in);
    int size = reader.nextInt();
    while (size > 0) {
        System.out.println(Main.ZeroCount(reader.nextInt()));
        size--;
    }
}

我用 1) long vs int 做到了; 2) i*=5 与带有 Math.pow(a,b) 函数的 while 循环; 3) Math.floor(c/d) 与简单的 c/d(因为在 Java 中整数除法用作 floor 函数)和其他一些简单的检查可能出错的地方。

有什么想法吗?谢谢!

【问题讨论】:

    标签: java algorithm factorial


    【解决方案1】:

    这是一个非常小的错误。

    在函数 ZeroCount 中,将 i &lt; num 替换为 i &lt;= num

    public static int ZeroCount (int num)
    {
        int zeros = 0;
        for (int i =5; i <= num; i*=5)
            zeros = zeros + (int)Math.floor(num/i);
        return zeros;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      相关资源
      最近更新 更多