2015-03-20 6 views
0

Я написал этот фрагмент кода, в который вы вводите любое целое число, и оно даст вам наименьшее простое число этого целого числа. , но он, похоже, терпит неудачу для действительно очень длинных чисел. Почему это, и как я могу это исправить?Почему программа терпит неудачу на самом деле?

import java.util.Scanner; 
public class ExThree { 
    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Enter number: "); 
     long num = sc.nextInt(); 
     boolean isPrime = false ; 
     long prime; 
     if(num>0){ 
      for(prime=2; prime<num && !isPrime; prime=prime+1){ 
       if(num%prime==0){ 
        isPrime=true; 
       } 
      } 
      if(prime==num){ 
       prime=prime+1; 
      } 
      System.out.println(prime-1); 
     } 
     else{ 
      System.out.println("bad input");   
     } 
    } 
} 
+1

Для действительно очень длинного номера вам нужно «BigInteger» – Masudul

+2

«кажется, что сбой» - это очень неопределенное описание того, что происходит, и «действительно очень длинные цифры» - очень неопределенное описание причины. Приведите пример ввода и ожидаемого/фактического вывода. –

+0

для 562612851654168 эта программа не сработает, например, – Invader

ответ

0

Длинные/Int имеют, конечно, максимальные значения. Если вы хотите использовать номера выше, используйте BigInteger (читайте String со сканера, а затем создайте из него новый BigInteger).

0

Используйте sc.nextLong();, чтобы получить длинную переменную.

1
long num = sc.nextInt(); 

Вы звоните nextInt() который возвращает Int, поэтому она не будет выполнена для чисел, которые слишком велики, чтобы хранить в междунар. Максимальное значение для Java ints составляет 2147483647, поэтому nextInt() не будет иметь таких чисел.

Scanner.nextLong() возвращает длинный, который имеет максимальное значение 9,223,372,036,854,775,807. Это больше, чем ваш образец ввода 562,612,851,654,168. Таким образом, вы должны иметь возможность читать такие цифры, используя nextLong().

Если вам нужно прочитать цифры, большие, чем длинные, посмотрите на использование BigInteger и Scanner.nextBigInteger().

Смежные вопросы