2

我正在尝试使用 Recursion 和 BigIntegers 进行阶乘,但 eclipse 抱怨 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

4 回答 4

10

BigInteger不支持比较 using==和乘法 using *。相反,您必须调用BigInteger类 (equals()multipy()) 的适当方法。

另请注意,存在BigInteger.ZEROBigInteger.ONE

最后,您的方法的返回类型fact应该是BigIntegerand not int。无论您希望参数是类型BigInteger还是int取决于您。

于 2012-05-28T06:27:46.893 回答
4

除了@aix 提到的关于调用算术的内容之外BigInteger-我还可以看到此代码的另一个问题。

您的方法签名是

public static  int fact(BigInteger n)

这是有问题的——阶乘增长很快,所以你很可能会溢出结果。
你真正想要的是:

public static  BigInteger fact(int n)

这更有意义,因为返回值可能应该是BigInteger(因为它增长很快)而不是参数,或者可能是两者。

于 2012-05-28T06:31:47.557 回答
3

Java 不支持运算符重载。因此,用户定义的类不支持 + 和 ==,只有一个例外是 java.lang.String 支持 +。

于 2012-05-28T06:31:13.290 回答
1

我相信你不能简单地在 BigInteger 对象上使用算术运算符。尝试将他们的方法用于算术过程,例如比较、减法、乘法等。

参考文献在这里给出

于 2012-05-28T06:30:32.417 回答