Проблема: я не могу сохранить номер «600851475143». Я понимаю, что это число больше, чем то, что может содержать int, и меньше максимального значения. Однако моя программа не регистрирует переменную «число» как длинную, она регистрирует ее как int. Может кто-то пролить свет на эту проблему?Ошибки в Java примитивных типов данных?
** - линия проблемы
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;
}
}
РЕШЕНИЕ: Как сказано ниже Джим, чтобы типа длиной, один должен поставить "L" или "л" в конец номера. «Целочисленный литерал имеет тип long, если он заканчивается буквой L или l, в противном случае он имеет тип int. Рекомендуется использовать букву верхнего регистра L, потому что букву нижнего регистра l трудно отличить от цифры 1.» - С сайта Oracle на примитивных типах.
Чуть подробнее: Java's L number (long) specification
Я вижу 2147483647 в вашем коде, не 600851475143. Не то, что должно привести к 'number' быть ИНТ и не долго. .. – BoltClock
Извините, я пытался решить мою проблему. «2147483647» - это максимальное число, которое может быть сохранено как int. Я понял, что любое число выше этого числа вызывает ошибку. Я редактировал свое оригинальное сообщение, чтобы избежать потенциальной путаницы для людей в будущем. – user1390463