问题:我无法存储号码'600851475143'。我意识到这个数字比int可以容纳的数字大,并且小于最大长值。但是,我的程序没有将变量“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;
}
}
解决方案:正如Jim在下面所说,为了类型为long,必须在数字的末尾加上“L”或“l”。 “如果整数字面以字母L或l结尾,则为long类型;否则为int类型。建议您使用大写字母L,因为小写字母l很难与数字1区分开来“。 - 来自Oracle网站上的原始类型。
答案 0 :(得分:12)
长文字需要用尾随的“L”表示,如600851475143L
答案 1 :(得分:4)
在这个字面值中放一个小'L':
600851475143L
原因是:
如果整数文字以字母L或l结尾,则其长度为long;否则它是int类型。建议您使用大写字母L,因为小写字母l很难与数字1区分开来。
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
您也可以使用此表示法,以便更清楚:
600_851_475_143L
答案 2 :(得分:4)
“我的程序没有将变量”number“注册为long,它是 将其注册为int“。
这不正确。你宣称它很长。这是一个漫长的过程。
你必须得到的是完全不同的东西:常量600851475143上的编译错误。尝试600851475143L。我建议如果你仔细阅读编译器错误信息,你会看到它。