как работает java.bigInteger valueOf? - PullRequest
0 голосов
/ 20 января 2010

Я делаю проект, касающийся больших чисел, без BigInteger, BigDecimal и т. Д. Мне удалось сделать все основы, но теперь мне нужно добавить возможность подсчитывать факториалы. Мой BigNumber хранит данные как int [].

Вот пример решения с BigInteger, но я не могу использовать его без фактического значения моего номера.

    BigInteger n = BigInteger.ONE;
    for (int i=1; i<=20; i++) {
        n = n.multiply(BigInteger.valueOf(i));
        System.out.println(i + "! = " + n);
    }

Так как посчитать значение? Добавлять целые числа от последнего к первому, умножая десятки на 10, сотни на 100 и т. Д. И т. Д. И сохраняя их как долго?

Источник BigInteger: http://developer.classpath.org/doc/java/math/BigInteger-source.html

1 Ответ

0 голосов
/ 04 августа 2010

Так как посчитать значение?Добавлять целые числа от последнего к первому, умножая десятки на 10, сотни на 100 и так далее, и так далее, и сохраняя их как долго?Вы намереныЧто произойдет, если значение станет больше Long.MAX_VALUE?

Если n равно BigInteger, то n.multiply(BigInteger.valueOf(i)); должно вернуть объект BigInteger.Метод multiply должен знать, как выполнять умножение с двумя объектами BigInteger без необходимости преобразования их в long.Один из способов сделать это - перебрать каждую цифру, используя алгоритм умножения и переноса, который мы изучали в начальной школе.Это будет довольно медленно, если ваши значения астрономические, но оно имеет то преимущество, что его легко понять и реализовать.

...