"Integer number too large" error message for 600851475143
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();
}
}
When the code above is run, it produces an error on the line obj.function(600851475143);
. Why?
Solution 1:
600851475143
cannot be represented as a 32-bit integer (type int
). It can be represented as a 64-bit integer (type long
). long literals in Java end with an "L": 600851475143L
Solution 2:
Append suffix L
: 23423429L
.
By default, java interpret all numeral literals as 32-bit integer values. If you want to explicitely specify that this is something bigger then 32-bit integer you should use suffix L
for long values.
Solution 3:
You need to use a long literal:
obj.function(600851475143l); // note the "l" at the end
But I would expect that function to run out of memory (or time) ...