项目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
,我认为它会工作