STEP 4.1a ループで階乗 (2013年度 坂倉さんの作品)


<問題>

入力された正の整数の階乗を求めるプログラムを作成せよ。(再帰を使わないで書いてみよう)
(0の階乗と1の階乗は1だけれども、0の階乗は今回、扱わないことにします。


<実行結果>

入力してください: 6
6の階乗:720

入力してください: 4
4の階乗:24

<ヒント> 5の階乗を求める1*2*3 .. 5と5*4*3 .. 1。どちらも書けるように。
回答プログラムには、intの最大値を表示するプログラムをつけておきます。




#include <stdio.h> #include <limits.h> int factorial (int); int factorial (int n) { } int main () { int i; printf("入力してください: "); scanf("%d", &i); printf("%dの階乗:%d¥n",i, factorial(i)); /* printf("intの最大値:10進%d 16進%x¥n",INT_MAX, INT_MAX); */ return 0; }
#include <stdio.h> #include <limits.h> int factorial (int); int factorial (int n) { /* 1*2*3 .. 5と計算する場合の回答は以下 */ int m = 1, j = 1; while () { m = m * j; } return m; } int main () { int i; printf("入力してください: "); scanf("%d", &i); printf("%dの階乗:%d¥n",i, factorial(i)); /* printf("intの最大値:10進%d 16進%x¥n",INT_MAX, INT_MAX); */ return 0; }
#include <stdio.h> #include <limits.h> int factorial (int); int factorial (int n) { /* 1*2*3 .. 5と計算する場合の回答は以下 */ int m = 1, j = 1; while (j <= n) { m = m * j; } return m; } int main () { int i; printf("入力してください: "); scanf("%d", &i); printf("%dの階乗:%d¥n",i, factorial(i)); /* printf("intの最大値:10進%d 16進%x¥n",INT_MAX, INT_MAX); */ return 0; }
#include <stdio.h> #include <limits.h> int factorial (int); int factorial (int n) { /* 1*2*3 .. 5と計算する場合の回答は以下 */ int m = 1, j = 1; while () { m = m * j; } return m; } int main () { int i; printf("入力してください: "); scanf("%d", &i); printf("%dの階乗:%d¥n",i, factorial(i)); /* printf("intの最大値:10進%d 16進%x¥n",INT_MAX, INT_MAX); */ return 0; }
#include <stdio.h> #include <limits.h> int factorial (int); int factorial (int n) { /* 1*2*3 .. 5と計算する場合の回答は以下 */ int m = 1, j = 1; while (j <= n) { m = m * j; } return m; } int main () { int i; printf("入力してください: "); scanf("%d", &i); printf("%dの階乗:%d¥n",i, factorial(i)); /* printf("intの最大値:10進%d 16進%x¥n",INT_MAX, INT_MAX); */ return 0; }
解答例

#include <stdio.h>
#include <limits.h>

int factorial (int);

int factorial (int n) {

    int m = 1;
    /* 1*2*3 .. 5と計算する場合の回答は以下
    int m = 1, j = 1;

    while (j <= n) {
        m = m * j;
        j++;
    } */


    return m;
}

int main () {
    int i;

    printf("入力してください: ");
    scanf("%d", &i);

    printf("%dの階乗:%d¥n",i, factorial(i));
/*   printf("intの最大値:10進%d 16進%x¥n",INT_MAX, INT_MAX); */

    return 0;
}