1

问题:我无法存储号码“600851475143”。我意识到这个数字大于 int 可以容纳的数字,并且小于最大 long 值。但是,我的程序没有将变量“number”注册为 long,而是将其注册为 int。有人可以阐明这个问题吗?

** - 问题所在行

public class Problem3{
//What is the largest prime factor of the number 600851475143
public static void main(String[] args){
  ***long number = 600851475143 , total = 0;
    for(long x = (number-1)/2; x>1; x--)
      if(number%x == 0 && isPrime(x)) total += x;
    System.out.println(total);
}
private static boolean isPrime(long determine){
  for(long x = determine/2 - 1; x>1; x--)
    if(determine%x ==0) return false;
  return true;
}

}

解决方案:正如吉姆在下面所说,为了输入长,必须在数字的末尾加上“L”或“l”。"整数文字如果以字母 L 或 l 结尾,则为 long 类型;否则为 int 类型。建议您使用大写字母 L,因为小写字母 l 与数字 1 难以区分。” - 来自 Oracle 网站上的原始类型。

更多信息: Java 的 L 编号(长)规范

4

3 回答 3

12

长文字需要用尾随“L”表示,如600851475143L

于 2012-05-11T23:48:49.907 回答
4

在这个字面值中放一个小“L”:

 600851475143L

原因是:

如果整数文字以字母 L 或 l 结尾,则它是 long 类型;否则它是 int 类型。建议您使用大写字母 L,因为小写字母 l 很难与数字 1 区分开来。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

你也可以使用这个表示法,更清楚:

 600_851_475_143L
于 2012-05-11T23:47:49.940 回答
4

“我的程序没有将变量“number”注册为 long,而是将其注册为 int”。

这是不正确的。您将其声明为长。它很长。

你必须得到的是完全不同的东西:常量 600851475143 上的编译错误。试试 600851475143L。我建议,如果您更仔细地阅读编译器错误消息,您就会看到这一点。

于 2012-05-11T23:48:45.513 回答