94 votes

Message d'erreur "Integer number too large" pour 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();
    }
}

Lorsque le code ci-dessus est exécuté, il produit une erreur sur la ligne obj.function(600851475143); . Pourquoi ?

4voto

JVM Points 79

Au moment de la compilation, le nombre "600851475143" est représenté par un nombre entier de 32 bits, essayez plutôt un long littéral à la fin de votre nombre pour éviter ce problème.

3voto

Anand Undavia Points 1764

En dehors de toutes les autres réponses, ce que vous pouvez faire est :

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

par exemple :

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

2voto

Milen.Jeremic Points 21

Ou bien, vous pouvez déclarer le nombre d'entrée comme long, et ensuite le laisser faire le tango du code :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;
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X