C言語で書いてみました

過去の情報処理技術者試験の出題をもとにして、Cのソースを起こしてみました。

■ 再帰を使わない階乗計算(平成16年午前問15)

#include <stdio.h>

/* 正の整数 M の階乗を計算(1) */
unsigned long nagarezu1(unsigned long M)
{
    unsigned long n, x = 1;
    for (n = M; n >= 1; n--) x *= n;
    return x;
}

/* 正の整数 M の階乗を計算(2) */
unsigned long nagarezu2(unsigned long M)
{
    unsigned long n = 1, x = 1;
    while (!(n > M)) {
        x *= n;
        n++;
    }
    return x;
}

/* メイン ルーチン */
int main()
{
    unsigned long x, y;
    printf("正の整数を入力:");
    scanf("%lu", &x);
    y = nagarezu1(x);
    printf("(流れ図 1) %lu の階乗:%lu\n", x, y);
    y = nagarezu2(x);
    printf("(流れ図 2) %lu の階乗:%lu\n", x, y);
    return 0;
}