欧拉计划 #3 超出整数范围 java
Project Euler #3 out of integer range java
该代码应该返回最大的质数。
有关此任务的更多信息: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() 的参数设置为双精度参数,因为我试图测试为什么我的代码无法正常工作。
System.out.println(checkFactors(13195));
有效并且 returns“29”。
然而,System.out.println(checkFactors(600851475143));
不起作用,
“int 类型的 600851475143 超出范围”。
System.out.println(checkFactors(600851475143.0));
确实可以编译,但几秒钟后给我一个 ArithmeticException。
使用 long 作为 na 和 biggestPrimeFactor 的数据类型。这些值太大,无法存储在 int 变量中。
试着让你的参数变回 long
并在你的大数字后面加上字母 L
像这样 600851475143L
,我认为它会起作用
600851475143 of type int is out of range
- 这个数字大于
int
可以存储的数量。将 .0
附加到数字会将数字转换为 double
,其中 可以 表示该数字
- 你可以
checkFactors(600851475143d)
而不是 .0
来确保数字是双精度而不是整数
该代码应该返回最大的质数。 有关此任务的更多信息: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() 的参数设置为双精度参数,因为我试图测试为什么我的代码无法正常工作。
System.out.println(checkFactors(13195));
有效并且 returns“29”。
然而,System.out.println(checkFactors(600851475143));
不起作用,
“int 类型的 600851475143 超出范围”。
System.out.println(checkFactors(600851475143.0));
确实可以编译,但几秒钟后给我一个 ArithmeticException。
使用 long 作为 na 和 biggestPrimeFactor 的数据类型。这些值太大,无法存储在 int 变量中。
试着让你的参数变回 long
并在你的大数字后面加上字母 L
像这样 600851475143L
,我认为它会起作用
600851475143 of type int is out of range
- 这个数字大于
int
可以存储的数量。将.0
附加到数字会将数字转换为double
,其中 可以 表示该数字 - 你可以
checkFactors(600851475143d)
而不是.0
来确保数字是双精度而不是整数