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();
}
}
Run Code Online (Sandbox Code Playgroud)
运行上面的代码时,它会在行上产生错误obj.function(600851475143);.为什么?
Rom*_*man 64
附加后缀L:23423429L.
默认情况下,java将所有数字文字解释为32位整数值.如果你想明确指出这是一个比32位整数更大的东西你应该使用后缀L为长值.
Thi*_*ilo 26
你需要使用长文字:
obj.function(600851475143l); // note the "l" at the end
Run Code Online (Sandbox Code Playgroud)
但我希望这个功能耗尽内存(或时间)......
jos*_*efx 12
java编译器默认尝试将600851475143解释为int类型的常量值.这会导致错误,因为600851475143无法用int表示.
要告诉编译器您希望数字解释为long,您必须添加l或L之后添加.那么你的号码应该是这样的600851475143L.
由于某些字体难以区分"1"和小写"l",因此应始终使用大写"L".
您需要40位来表示整数文字600851475143.在Java中,最大整数值是2 ^ 31-1但是(即整数是32位,请参阅http://download.oracle.com/javase/1.4.2/docs /api/java/lang/Integer.html).
这与此无关function.请尝试使用长整数文字(如其他答案中所述).
| 归档时间: |
|
| 查看次数: |
119827 次 |
| 最近记录: |