2016-11-08 10 views
0

forループを使用して数値のスーパー階乗を計算して出力するプログラムを作成します。数の階乗は、その数を含むすべての整数の積であるので、4の階乗は4 * 3 * 2 * 1 = 24です。スーパーファクトリープログラムはどのように書くのですか?

スーパー階乗は、その階乗までのすべての階乗の

4 !! = 4!* 3!* 2!* 1!

私は、次のコードを使用して "階乗" が見つかりました:

import java.util.Scanner; 
public class superfactorial { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Scanner input = new Scanner (System.in); 

     // number whose factorial to be found 
     int number; 
     // prompting input 
     System.out.print("Enter number: "); 
      number = input.nextInt(); 

     int factorial = factorial(number); 

     System.out.printf("the factorial of %d is %d", number , factorial); 
    } 

    // method that calculates the factorial 
    public static int factorial (int n){ 
     int output = 1; 
     for (int i=1; i <= n; i++) { 
      output = output * i;     
     } 
      return output; 
    } 
} 
+0

これには 'int'を使用しないでください。十分な大きさの数値が格納されません。おそらく 'BigInteger'クラスを使うことを学びたいと思うでしょう。 –

+0

私は知っていますが、私の質問はスーパーファクターを見つける方法か、そのコードを書く方法です –

+0

誰かにコードを書いてほしいと言っていますか? 'factorial'メソッドを書くことができれば、あなたは' superfactorial'メソッドを書くために知っておくべきことをすでに知っているようです。あなたは正確に何を苦労していますか? –

答えて

0

のようになりますあなたの階乗の方法の中で最も重要な行はこの行です:

output = output * i; 

iが1ずつ増加し続ける整数あなたはioutputを掛けます。

スーパーファクターとノーマルファクターの違いは何ですか?スーパーファクターを評価するには、iではなく、iの階乗で、outputを掛けます。

だからやってみてください!私はすでにあなたにすべてのことを説明しました!ただ、superfactorialと呼ばれる新しいメソッドを作成階乗メソッドからすべてのものをコピーして、この行を変更します。これに

output = output * i; 

:ここ

output = output * factorial(i); 
1

は4考えてみましょう! = 4x​​3x2x1とすると、分解に4つの数字があることが分かります。一般的に、nの分解にはn個の数字があるだろう! (n-1)(n-2)...(n-(n-1))ですので、超階乗を得るために必要なのは、分解における各成分の階乗を取ることだけです。

擬似コードは、この

sp = 0 
for i = n to 1: 
    sp = sp * factorial(i) 
end for 
return sp 
+0

ループを1からnにすることもできますが、違いはありません –

0

は再帰的なアプローチです。 基本的に、階乗では、n * fact(n-1)を掛けます。ここで、我々はすべての階乗の積を必要とするので、(n)* superFact(n-1)を実際に行う。

int superfactorial(int n) { 
    if (n == 0 || n == 1) { 
     return factorial(n); 
    } else { 
     return factorial(n) * superfactorial(n-1); 
    } 
    } 


    int factorial(int n) { 
    if(n == 0 || n == 1) { 
     return n; 
    } else { 
     return n * factorial(n-1); 
    } 
    } 
関連する問題