【发布时间】:2012-05-20 13:14:54
【问题描述】:
问题:我无法存储号码“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;
}
}
解决方案:正如 Jim 在下面所说的,为了输入 long 类型,必须在数字末尾添加“L”或“l”。 "整数字面量如果以字母 L 或 l 结尾,则为 long 类型;否则为 int 类型。建议使用大写字母 L,因为小写字母 l 与数字 1 难以区分。” - 来自 Oracle 网站的原始类型。
【问题讨论】:
-
我在您的代码中看到了 2147483647,而不是 600851475143。这不应该导致
number成为 int 而不是 long... -
抱歉,我正在尝试解决我的问题。 “2147483647”是可以存储为 int 的最大数量。我意识到任何高于这个数字的数字都会导致错误。我编辑了我的原始帖子,以避免将来给人们带来潜在的困惑。