困难的BigInteger(Difficulty with BigInteger)

2019-06-24 20:49发布

我试图做的阶乘递归和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);
        }
    }
}

Answer 1:

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

还要注意的是存在BigInteger.ZEROBigInteger.ONE

最后,你的返回类型 fact方法应该是BigInteger ,而不是int 。 无论你是想参数为类型BigIntegerint是你。



Answer 2:

除了@aix提到关于调用的算术什么BigInteger -我也可以看到这个代码的另一个问题。

你的方法签名

public static  int fact(BigInteger n)

这是problemantic - 析因生长快,所以你很可能溢出的结果。
觉得你真的想要的是:

public static  BigInteger fact(int n)

这使得更多的意义,因为返回值可能应该是BigInteger (因为它的增长速度快),而不是参数,或者可能-他们两个。



Answer 3:

Java不支持操作符重载。 所以,+和==不能与java.lang.String中支持+一个例外来支持用户定义的类。



Answer 4:

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

参考文献中给出这里



文章来源: Difficulty with BigInteger