代码应该返回最大素数。有关此任务的更多信息:https://projecteuler.net/problem=3
int checkFactors(double na) {
long n = (long) na;
int biggestPrimeFactor = 0;
for (int i = 1; i < n; i++)
if (n % i == 0 && isPrimFaktor(i) && i > biggestPrimeFactor)
biggestPrimeFactor = i;
return biggestPrimeFactor;
}
boolean isPrimeFactor(int n) {
int length= 0;
for (int i = n; i > 0; i--)
if (n % i == 0)
length++;
if (length== 2)
return true;
return false;
}我决定将checkFactors()的参数设为double,因为我试图测试为什么我的代码不能正常工作。
System.out.println(checkFactors(13195));工程并返回"29“。
然而,System.out.println(checkFactors(600851475143));不起作用,
"600851475143的int类型超出了范围“。
System.out.println(checkFactors(600851475143.0));确实编译了,但是在几秒钟后给了我一个ArithmeticException。
发布于 2015-01-13 14:01:01
600851475143 of type int is out of range
int存储的要大。将.0附加到数字后,将该数字转换为可以表示该数字的double.0,您可以执行checkFactors(600851475143d),以确保数字是双的,而不是int的发布于 2015-01-13 13:58:31
将long用作na和biggestPrimeFactor的数据类型。这些值太大,无法存储在int变量中。
发布于 2015-01-13 13:59:45
尝试将您的参数返回到long,并使字母L后,您的大数字后,像这个600851475143L,我认为它会工作。
https://stackoverflow.com/questions/27923619
复制相似问题