Mensagem de erro “número inteiro inteiro muito grande” para 600851475143

public class Three { public static void main(String[] args) { Three obj = new Three(); obj.function(600851475143); } private Long function(long i) { Stack stack = new Stack(); for (long j = 2; j <= i; j++) { if (i % j == 0) { stack.push(j); } } return stack.pop(); } } 

Quando o código acima é executado, produz um erro na linha obj.function(600851475143); . Por quê?

600851475143 não pode ser representado como um inteiro de 32 bits (tipo int ). Pode ser representado como um inteiro de 64 bits (tipo long ). literais longos em Java terminam com um “L”: 600851475143L

Anexe o sufixo L : 23423429L .

Por padrão, o java interpreta todos os literais numéricos como valores inteiros de 32 bits. Se você deseja especificar explicitamente que isso é algo maior que o inteiro de 32 bits, use o sufixo L para valores longos.

Você precisa usar um longo literal:

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

Mas eu esperaria que essa function fique sem memory (ou tempo) …

O compilador java tenta interpretar 600851475143 como um valor constante do tipo int por padrão. Isso causa um erro, pois 600851475143 não pode ser representado com um int.

Para dizer ao compilador que você quer que o número interpretet seja longo, você deve adicionar l ou L depois dele. Seu número deve ficar assim 600851475143L .

Como algumas fonts dificultam a distinção entre “1” e “l” minúscula, você deve sempre usar a letra maiúscula “L”.

Você precisa de 40 bits para representar o literal inteiro 600851475143. Em Java, o valor inteiro máximo é 2 ^ 31-1 (isto é, os inteiros são 32 bits, consulte http://download.oracle.com/javase/1.4.2/docs /api/java/lang/Integer.html ).

Isso não tem nada a ver com function . Tente usar um literal inteiro longo em vez disso (como sugerido nas outras respostas).

Em tempo de compilation, o número “600851475143” é representado no inteiro de 32 bits, tente literal longo no final do seu número para superar este problema.

Além de todas as outras respostas, o que você pode fazer é:

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

por exemplo :

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

Ou, você pode declarar o número de input por tanto tempo, e então deixá-lo fazer o código tango: 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; } } }