“整数太大”错误消息为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(); } } 

当上面的代码运行时,它会在行obj.function(600851475143);上产生一个错误obj.function(600851475143); 。 为什么?

600851475143不能表示为32位整数( inttypes)。 它可以表示为一个64位整数( longtypes)。 Java中的长文字以“L”结尾: 600851475143L

追加后缀L23423429L

默认情况下,java将所有数字文字解释为32位整数值。 如果你想明确地指定这是一个更大的32位整数,你应该使用后缀L作为长值。

你需要使用长文字:

 obj.function(600851475143l); // note the "l" at the end 

但我期望的function用完内存(或时间)…

java编译器会默认将600851475143解释为inttypes的常量值。 这将导致错误,因为600851475143不能用int表示。

为了告诉编译器你需要把数字解释为一个长整数,你必须在它之后加lL 你的号码应该像这样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无关。 尝试使用长整型文字来代替(如其他答案中的build议)。

在编译时,数字“600851475143”以32位整数表示,尝试使用长整型数字,而不是在数字的末尾来解决这个问题。

除了所有其他的答案,你可以做的是:

 long l = Long.parseLong("600851475143"); 

例如 :

 obj.function(Long.parseLong("600851475143")); 

或者,你可以声明input号码,然后让它做代码探戈:D …

 public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Enter a number"); long n = in.nextLong(); for (long i = 2; i <= n; i++) { while (n % i == 0) { System.out.print(", " + i); n /= i; } } }