所以我最近一直在做一些欧拉项目,但由于某种原因,我的代码无法工作,因为 Java 不断舍入我的分区。
public class Problem3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
double max = 0;
double n = 600851475431.;
for (double i = 2; i<Math.sqrt(n); i++){
if (600851475431.%i == 0){
if (isPrime (i) == true && i>max){
max = i;
}
}
}
System.out.print(max);
}
public static boolean isPrime(double a){
for (int i= 2; i<Math.sqrt(a); i++){
if (a%i == 0){
return false;
}
}
return true;
}
首先,600851475431%168887不等于0,但Java一直认为它等于0。
最佳答案
提示:当您需要精确表示大于 2^31 - 1
的数字时,请使用 long
。当您需要精确表示大于 2^64 - 1
的数字时,请使用 BigInteger .
600851475431 介于 2^39
和 2^41
之间。
我会让你得出结论。
编辑
另一个提示:if (600851475431.%i == 0){
注意.
。这会强制将数字表示为 double 型。您有一个变量n
,其中具有显式定义的类型。使用它。
关于java - 如何阻止 Java 对我的数字进行四舍五入,以便解决问题 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16495392/