階乗


数学で学習済みの方はご存知だと思いますが、nの階乗とは n~1までの数を掛けたもののことで、「n!」と表します。

例えば5の階乗は、5! = 5 × 4 × 3 × 2 × 1 = 120 となります。

階乗は、順列や組み合わせといった確率の分野でよく使われ、プログラムの問題でもよく登場します。

1.階乗と繰り返し


階乗の処理は合計処理に似ています。合計処理で足していく処理の部分を、掛けていく処理に代えるだけです。

ただ、合計の場合は合計結果の変数を0で初期化しましたが、階乗は掛け算なので、1で初期化することに注意してください。

0で初期化してしまうと、何を掛けても0になってしまいます・・・

 

下記は「入力値(0以上の整数)の階乗を求める」プログラムです。


階乗を求める(C)



#include <stdio.h>
int main(void){
    int i, num, fact;
    printf("0以上の整数を入力:");
    scanf("%d", &num);
    
    fact = 1;
    for(i=1; i<=num; i++){
        fact = fact * i;
    }

    printf("%d! = %d\n", num, fact);
    return 0;
}

階乗を求める(Java)

import java.util.Scanner;
public class Factorial{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int num, fact;
        System.out.print("0以上の整数を入力:");
        num = sc.nextInt();

        fact = 1;
        for(int i=1; i<=num; i++){
            fact = fact * i;
        }

        System.out.println(num + "! = " + fact);
    }
}


実行結果(例)

0以上の整数を入力:5

5! = 120

 

なお、1を掛ける行為は意味がないので、カウンタ i の初期値を2にして、2から掛けるようにしても結果は変わりません。

また、数学では0の階乗=1という決まりがあるのですが、このプログラムはそこもカバーできています。