Сообщение об ошибке «Целое число слишком большое» для 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(); } } 

Когда выполняется код выше, он вызывает ошибку в строке obj.function(600851475143); , Зачем?

600851475143 не может быть представлено как 32-разрядное целое число (тип int ). Он может быть представлен как 64-битное целое число (тип long ). длинные литералы в Java заканчиваются 600851475143L «L»: 600851475143L

Добавить суффикс L : 23423429L .

По умолчанию java интерпретирует все числовые литералы как 32-битные целочисленные значения. Если вы хотите явно указать, что это нечто большее, чем 32-битное целое число, вы должны использовать суффикс L для длинных значений.

Вам нужно использовать длинный литерал:

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

Но я бы ожидал, что у этой функции закончится память (или время) …

Компилятор java пытается интерпретировать 600851475143 как постоянное значение типа int по умолчанию. Это вызывает ошибку, так как 600851475143 не может быть представлено с помощью int.

Чтобы сообщить компилятору, что вы хотите, чтобы интерпретатор числа был длинным, вам нужно добавить l или L после него. Затем ваш номер должен выглядеть так: 600851475143L .

Поскольку некоторые шрифты затрудняют различать «1» и «нижний регистр» «друг от друга», вы всегда должны использовать верхний регистр «L».

Вам нужно 40 бит для представления целочисленного литерала 600851475143. В Java максимальное целочисленное значение равно 2 ^ 31-1 (т. Е. Целые числа – 32 бит, см. http://download.oracle.com/javase/1.4.2/docs /api/java/lang/Integer.html ).

Это не имеет никакого отношения к function . Вместо этого попробуйте использовать длинный целочисленный литерал (как предложено в других ответах).

Во время компиляции число «600851475143» представлено в 32-битовом целое, попробуйте длинный литерал вместо этого в конце вашего номера, чтобы перейти от этой проблемы.

Помимо всех других ответов, вы можете сделать следующее:

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

например :

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

Или вы можете объявить номер ввода как можно дольше, а затем позволить ему делать код танго: 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; } } } 
  • Как декодировать строку, закодированную с помощью openssl aes-128-cbc, используя java?
  • Сохранение объектов для размещения по координатам x, y
  • Как получить список IP-соединений, подключенных в одной сети (подсеть), используя Java
  • Как избежать обратных косых черт и автоматически создаваемого escape-символа в пути к файлу в java
  • Сделать Java runtime игнорировать serialVersionUID?
  • Java-способ проверить, является ли строка палиндром
  • Как удалить последний символ из строки?
  • Как установить таймер в Java?
  • Влияние производительности использования instanceof в Java
  • Как использовать List to List
  • В функциональном стиле Java8, как я могу сопоставить значения с уже существующей парой значений ключа
  • Interesting Posts

    Подключение нескольких точек доступа

    Папка «Мои документы» для нового местоположения в Windows 7

    Как остановить ASP.NET от изменения идентификаторов, чтобы использовать jQuery

    Класс java.util.Map имеет общие параметры типа, вместо этого используйте GenericTypeIndicator

    Выровнять текст по наклонной линии

    Определяя максимальную оперативную память, я могу обновить свой компьютер до и какого типа

    Игнорировать все зависимости для конкретного пакета с помощью apt-get

    DVI-D и DVI-I: отличное качество цифрового видео?

    Cron работает, но ничего не происходит

    Как получить root-доступ к эмулятору Android?

    Как использовать HTML для печати верхнего и нижнего колонтитула на каждой печатной странице документа?

    Как HashTables справляется с столкновениями?

    Использование статических переменных вместо состояния приложения в ASP.NET

    Как подключиться к папке HTDA WebDAV в Windows 7?

    Перенаправление на фактическую страницу, что они просматривали до входа в систему

    Давайте будем гением компьютера.