プログラムはコマンドライン引数 N を読み取り、N! = 1 * 2 * ... * N
標準出力に出力します。
public class Factorial {
// return n!
// precondition: n >= 0 and n <= 20
public static long factorial(long n) {
if (n < 0) throw new RuntimeException("Underflow error in factorial");
else if (n > 20) throw new RuntimeException("Overflow error in factorial");
else if (n == 0) return 1;
else return n * factorial(n-1);
}
public static void main(String[] args) {
long N = Long.parseLong(args[0]);
System.out.println(factorial(N));
}
}
入力 (N) と出力 (階乗 (N)) の例:
5 >>> 120
12 >>> 479001600
20 >>> 2432902008176640000
21 >>> java.lang.RuntimeException: Overflow error in factorial
備考:
- N > 20 の場合、long はオーバーフローし
ます - より大きな階乗を処理するには、拡張精度演算を使用する必要があります
それで、私の質問は、このコードでより大きな階乗を処理するために拡張精度演算を使用する方法ですか?? 変数longよりも大きな値を保持できるJavaの変数タイプは他にありますか?