2009年8月16日日曜日

第10回 while文②

予備知識:
階乗は、

n! = 1×2×3×・・・×n-1×n

と表せられる。ただし、0!=1です。

お題:
階乗を計算するプログラム
①はじめに、n!の整数nを入力させる
②n!の計算式と、計算結果を表示させる

プログラム実行例

整数nを入力してください。
n=5
5! = 1×2×3×4×5 = 120

必須事項
・while文を使うこと
・n=0にも対応する

解答は8月20日に掲載します。それまでにプログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付して以下のアドレスに送ってください。

解答、質問はこちらまで
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答例

1

2
3
4
5

6
7

8
9
10
11
12
13

#include <stdio.h>

int main () {
    int n,i,a;
    i=1;
    a=1;

   puts("整数nを入力してください。");
    printf("n=");    scanf("%d", &n);

    while ( n >= i ) {
        a=a*i;
        i++;
    }

    printf("%d!=%d\n",n,a);
}

実行例は次の通りです。

整数nを入力してください。
n=33
33!=-214748364
12!=479001600

解説

n=0の場合は1が答えですが、このプログラムではn=0の時while文を通らず、12行目のprintfにて、初期値のa=1が表示されます。

int型は10桁までしか保存できないので、n=33が限界です。n=34以上になると、n!が10桁を超えてしまいます。
int型は10桁までしか保存できないので、n=12が限界です。n=13以上になると、n!が10桁を超えてしまい、誤った値が出ます。

9行目の

a=a*i;

は、左辺のaが新しいaで、右辺のaは古いaです。while文のような繰り返す命令ではよくつかわれます。新しい変数にドンドン古い変数を入れていく感覚です。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

※2009.9.4 訂正