public class Three {
public static void main(String[] args) {
Three obj = new Three();
obj.function(600851475143);
}
private Long function(long i) {
Stack<Long> stack = new Stack<Long>();
for (long j = 2; j <= i; j++) {
if (i % j == 0) {
stack.push(j);
}
}
return stack.pop();
}
}
当运行上面的代码时,它会在obj.function(600851475143);
行上产生一个错误。为什么?
发布于 2010-09-21 14:20:36
600851475143
不能表示为32位整数(类型为int
)。它可以表示为64位整数(类型为long
)。Java中的长文字以“L”结尾:600851475143L
发布于 2010-09-21 14:20:43
追加后缀L
:23423429L
。
默认情况下,java将所有数字字面值解释为32位整数值。如果您想明确指定这是大于32位整数的值,则应该对长值使用后缀L
。
发布于 2010-09-21 14:20:07
您需要使用一个长文字:
obj.function(600851475143l); // note the "l" at the end
但我预计该函数会耗尽内存(或时间)……
https://stackoverflow.com/questions/3757763
复制相似问题