今天我尝试在SPOJ(link)上解决“Factorial”问题,它看起来像是简单的尾随零编号算法,但我一直在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 vs while循环使用Math.pow(a,b)函数; 3)Math.floor(c / d)vs simple c / d(因为在Java中整数除法作为floor函数)和其他一些简单的检查可能出错。
有什么想法吗?谢谢!
答案 0 :(得分:1)
这是一个非常小的错误。
在函数ZeroCount中,将i < num
替换为i <= 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;
}