在长变量中存储12位整数会产生编译错误,为什么?

时间:2015-03-01 22:04:53

标签: java

我正在尝试从Project Euler中解决问题,它涉及对大数字进行计算。我知道long用来分配大数字,但是当我编译它时会给我以下错误:

  

错误:整数过大:600851475143 long num =   600851475143;

这是我的代码:

public static void main(String[] args) {
  long bigDiv, div = 0;
  long num = 600851475143;
  bigDiv = 1;
  for(long i = 2; i < num; i++)  {
     if(num % i == 0)  {
        for(long j = 2; j < i; j++) {
           if(i % j == 0)
              div++;
        }
        if(div == 0)
           bigDiv = i;
     }
  }
  System.out.println("Biggest prime divisor = " + bigDiv);
}

1 个答案:

答案 0 :(得分:8)

如果没有添加L num,则会将其解释为最大值为231-1的整数。

long num = 600851475143L;

l也可以使用,但看起来太像1所以推荐前者

有关详情,请参阅JLS §3.10.1