Problème: Je ne peux pas stocker le numéro '600851475143'. Je me rends compte que ce nombre est plus grand que ce qu'un int peut contenir et est plus petit que la valeur longue maximale. Cependant, mon programme n'enregistre pas la variable "nombre" comme un long, il l'enregistre comme un int. Quelqu'un peut-il faire la lumière sur ce problème?Java confondant les types de données primitifs?
** - Ligne du problème
public class Problem3{
//What is the largest prime factor of the number 600851475143
public static void main(String[] args){
***long number = 600851475143 , total = 0;
for(long x = (number-1)/2; x>1; x--)
if(number%x == 0 && isPrime(x)) total += x;
System.out.println(total);
}
private static boolean isPrime(long determine){
for(long x = determine/2 - 1; x>1; x--)
if(determine%x ==0) return false;
return true;
}
}
SOLUTION: Comme Jim dit ci-dessous, afin de type long, il faut mettre un "L" ou "l" à la fin du nombre. "Un littéral entier est de type long s'il se termine par la lettre L ou l, sinon il est de type int. Il est recommandé d'utiliser la lettre majuscule L car la lettre minuscule l est difficile à distinguer du chiffre 1." - Du site Oracle sur les types Primitifs.
Un peu plus d'info: Java's L number (long) specification
« L » arrière, je vois 2147483647 dans votre code, ne 600851475143. pas que cela devrait provoquer 'number' être un entier et non une longue. .. – BoltClock
Désolé, j'essayais de résoudre mon problème. Le "2147483647" est le nombre maximum qui peut être stocké comme un int. J'ai réalisé que n'importe quel nombre au-dessus de ce nombre causait une erreur. J'ai édité mon message original pour éviter toute confusion potentielle pour les gens à l'avenir. – user1390463