2010-01-20 3 views
-1

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

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

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

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

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

+4

Возможно, это только я, но я не совсем понимаю этот вопрос. – Roman

+0

Вопрос мне также непонятен. Похоже, что OP хочет сохранить целое число в массиве с каждым элементом массива, соответствующим каждой цифре (я тоже могу ошибаться) – sateesh

+0

@sateesh О, вы правы. Это то, что мне казалось тоже, но я не совсем понял, какую роль играет BigInteger или образец кода в вопросе. Я просто перечитал его, и похоже, что код не связан. – Roman

ответ

0

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

Я не думаю, что хранить его как long - это то, что вы намерены. Что произойдет, если значение станет больше, чем Long.MAX_VALUE?

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

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