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?
You need 40 bits to represent the integer literal 600851475143. In Java, the maximum integer value is 2^31-1 however (i.e. integers are 32 bit, see http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html).
This has nothing to do with
function
. Try using a long integer literal instead (as suggested in the other answers).Apart from all the other answers, what you can do is :
for example :
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.At compile time the number "600851475143" is represented in 32-bit integer, try long literal instead at the end of your number to get over from this problem.
Or, you can declare input number as long, and then let it do the code tango :D ...
600851475143
cannot be represented as a 32-bit integer (typeint
). It can be represented as a 64-bit integer (typelong
). long literals in Java end with an "L":600851475143L