Консоль Eclipse, видимо, глючила, вычисляя факториал в 1 000 000 - PullRequest
1 голос
/ 29 мая 2019

Выполняя с другом несколько тестов по поводу класса BigInteger на Java, он создал код, который печатает «n:» и получает заданное число, чтобы найти его факториал.Через некоторое время я попытался вычислить факториал в 1 000 000, но затем (после нескольких минут вычислений) консоль показала только много нулей, даже без вывода на печать «n:», который выводится при запуске программы и «n!: "когда отображается результат.

В тестах, до 300k, код работал нормально (за исключением времени до вычисления, но это не соответствует ожиданиям, учитывая числа).Obs .: цикл используется для разделения строк, так как они поддерживают только 4096 символов

public static BigInteger zero = new BigInteger("0");
    public static BigInteger one = new BigInteger("1");
    public static BigInteger minusOne = new BigInteger("-1");


    public static BigInteger fat(BigInteger n) {

        if(n.equals(zero)) {
            return new BigInteger("1");
        }

        BigInteger i = new BigInteger(n.toString());
        while(!i.equals(one)) {
            i = i.add(minusOne);
            n = n.multiply(i);
        }

        return new BigInteger(n.toString());
    }

    public static void main(String[] args) throws IOException {

        Scanner in = new Scanner(System.in);

        System.out.print("n: ");
        BigInteger bigInt = new BigInteger(in.nextLine());
        String bigString = fat(bigInt).toString();
        int strSize = bigString.length();

        System.out.println("n! = ");

        for (int i = 0; i < strSize; i++) {
            if((i+1)%4096==0) {
                System.out.printf("%c\n",bigString.charAt(i));
            }else {
                System.out.print(bigString.charAt(i));
            }
        }

        in.close();

    }

}

Предположительно, должен был произойти некоторый вывод, только не связка нулей и, очевидно, перезапись первого отпечатка.Даже с большими числами, такими как 300k, отпечатки «n:» и «n !:» остались там.Нет сообщений об ошибках переполнения или переполнения стека.В какой-то момент я подумал, что консоль показывает только последнюю часть номера, но, спросив друга, он сказал о какой-то неизвестной ошибке консоли или Eclipse (по крайней мере, для нас).

...