Вопрос по biginteger, java – Сложность с BigInteger

2

Я пытаюсь сделать Факториал с Рекурсией и BigIntegers, но затмение жалуется на BigInteger. Я знаю, что программа должна быть простой, но она вызывает у меня головную боль. Вот код

import java.util.Scanner;
import java.math.BigInteger;

public class Factorial
{
    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter integer");
        BigInteger n = input.nextBigInteger();
        System.out.println("Factorial of " + n + " is "  + fact(n));

    }

    public static  int fact(BigInteger n)
    {
        if(n ==0)
        {
            return 1;
        }
        else
        {
            return n * fact(n-1);
        }
    }
}

Ваш Ответ

4   ответа
1

Я считаю, что вы не можете просто использовать арифметический оператор на объекте BigInteger. Попробуйте использовать их методы для арифметических процессов, таких как сравнение, вычитание, умножение и т. Д.

Рекомендации даныВот

10

BigInteger не поддерживает сравнение с использованием== и умножение с использованием*, Вместо этого вы должны вызвать соответствующие методыBigInteger учебный класс (equals() а такжеmultipy()).

Также обратите внимание, что существуютBigInteger.ZERO а такжеBigInteger.ONE.

Наконец,return type вашейfact метод должен бытьBigInteger и неint, Хотите ли выargument быть типомBigInteger или жеint зависит от тебя.

Кроме того, вашfactorial Метод должен, вероятно, приниматьint и возвращаяBigInteger, А не наоборот.
хорошо ура приятель! user815693
3

Java не поддерживает перегрузку операторов. Таким образом, + и == не могут поддерживаться пользовательскими классами с одним исключением, которое поддерживает java.lang.String +.

4

В дополнение к тому, что @aix упомянул относительно вызова арифметики наBigInteger - Я также вижу другую проблему с этим кодом.

Ваша подпись метода

public static  int fact(BigInteger n)

Это проблематично - факториал быстро растет, поэтому вы, скорее всего, переполните результат.
яthink то, что вы действительно хотели, это:

public static  BigInteger fact(int n)

что имеет гораздо больше смысла, так как возвращаемое значение, вероятно, должно бытьBigInteger (так как он быстро растет), а не параметр, или, возможно, - оба из них.

Похожие вопросы