项目Euler#3超出整数范围java

该代码应该回馈最大的素数。 有关此任务的更多信息,请访问: https : //projecteuler.net/problem=3

int checkFactors(double na) { long n = (long) na; int biggestPrimeFactor = 0; for (int i = 1; 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)); 不起作用,

“int类型的600851475143超出范围”。

 System.out.println(checkFactors(600851475143.0)); 

编译,但几秒后给我一个ArithmeticException。

600851475143 of type int is out of range

  • 这个数字大于int可以存储的数量。 在数字上附加.0会将数字转换为可以表示该数字的double
  • 而不是.0你可以做checkFactors(600851475143d) ,它确保数字是一个双checkFactors(600851475143d)而不是一个整数

使用long作为na和bigPrimeFactor的数据类型。 这些值太大,无法存储在int变量中。

尝试让你的参数回到long并在你的大数字之后写字母L ,如600851475143L ,我认为它会工作