【发布时间】:2013-12-17 21:02:58
【问题描述】:
我正在尝试解决一些项目欧拉问题,无论出于何种原因,每当我尝试使用大量数字运行它时,以下代码都会给我一个除以零的错误。谁能告诉我为什么?
import java.util.Scanner;
public class Problem3LargestPrimeFactor {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter the number to find the largest prime factor for.");
long num = input.nextLong();
int largest = 1;
boolean isPrime = true;
for(int i = 2; i < num; i++) {
if(num % i == 0) {
for(int u = 2; u < i; u++){
if(i % u == 0)
isPrime = false;
}
if(isPrime)
largest = i;
}
}
}
}
现在我知道这不是设计算法的最有效方法,但谁能告诉我这里发生了什么?
【问题讨论】:
-
“...有大量数字”。听起来你已经超出了
int的容量。 -
num是long,但i只是int。所以如果num大于最大整数,i++最终会溢出。我猜它最终会达到 0,因此num % i将引发除以零错误。 -
谢谢!我不敢相信这么简单的事情就这么溜走了。
-
你见过这个算法sieve of eratosthenes,因为你已经知道你的限制可能有用
标签: java divide-by-zero