Найти факториал числа с применением BigInteger

575
06 февраля 2017, 15:49

Условие задачи: Реализуйте метод, вычисляющий факториал заданного натурального числа. Факториал NN вычисляется как 1⋅2⋅...⋅N1⋅2⋅...⋅N. Поскольку это очень быстро растущая функция, то даже для небольших NN вместимости типов int и long очень скоро не хватит. Поэтому будем использовать BigInteger.

Задачу получилось решить только в int-овом поле, ну это так для того чтобы понимать что к чему. Но не получается обернуть код в обертку BigInteger. Возможно ли BigInteger запихнуть в цикл for или иду неправильным путем?

public class Factorial {
public static void main(String[] args) {
    System.out.println(factorial(10));
}
public static int factorial(int value) {
   int x = 1;
    for (int i = 1; i <= value; i++){
        x = x * i;
    }
    return x;
}

}

Вот собственно решение через int, но как начинаю числа оборачивать в BigInteger - компилятор люто негодует. Дайте наводку, пож-а.

Answer 1

Для умножения BigInteger используйте функцию multiply.

import java.util.*;
import java.lang.*;
import java.io.*;
import java.math.*;
class Factorial
{
public static void main (String[] args) throws Exception
{
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    System.out.println(factorial(n).toString());
}
public static BigInteger factorial(int n)
{
    BigInteger res = BigInteger.valueOf(1);
    for (int i = 2; i <= n; i++){
        res = res.multiply(BigInteger.valueOf(i));
    }
    return res;
}
}
Answer 2

Вот собственно мое решение, моя проблема была именно в неумении правильно оборачивать переменные в обертку от BitInteger:

public class Factorial {
public static void main(String[] args) {
    System.out.println(factorial(5));
}
public static BigInteger factorial(int value) {
    BigInteger v = BigInteger.valueOf(value);
    BigInteger s = BigInteger.valueOf(1);
    for (long i = 1; i <= value; i++){
        BigInteger i2 = BigInteger.valueOf(i);
        s = s.multiply(i2);
    }
    return s; // your implementation here
}

}

READ ALSO
Code Style for OOP [дубликат]

Code Style for OOP [дубликат]

На данный вопрос уже ответили:

450
Как программно запретить &ldquo;Overlay scrollbar&rdquo; в Ubuntu

Как программно запретить “Overlay scrollbar” в Ubuntu

Я пытаюсь портировать на Ubuntu свое приложение, построенное на SWT, и столкнулся с проблемой с тназ

472
Оценка кода своей реализации TreeSet

Оценка кода своей реализации TreeSet

Дали задание создать свою реализацию TreeSet, в котором должны быть методы add(E e) и List<E> get()

430