2

再帰とBigIntegerで階乗を実行しようとしていますが、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==を使用した比較とを使用した乗算はサポートされていません*。代わりに、BigIntegerクラス(equals()およびmultipy())の適切なメソッドを呼び出す必要があります。

BigInteger.ZEROまた、とが存在することに注意してくださいBigInteger.ONE

最後に、メソッドの戻り型はである必要があり、ではありません。引数を型にするかどうかはあなた次第です。factBigIntegerintBigIntegerint

于 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 に答える