小テスト (7月15日)


多倍長計算

1000の階乗 (1 × 2 × 3 × ... × 1000) の値を 計算したい。

(1) 普通にint型を使って1!, 2!, 3!と計算していくと、正常に計算できるのは いくつまでか確かめよ。結果がおかしくなったnについて、なぜおかしくなったのか 考察せよ。

(2) 配列で10000進数を表現する(要するに4桁ずつ区切って配列に格納する) ことによってこの値を計算するプログラムを作れ。

#include <stdio.h>

int main(void)
{
    int a[10000];
    int n, i, j, carry, tmp;

    a[0] = 1;
    n = 1;

    for (i=2; i<=1000; i++) {
        carry = 0;
        for (j=0; j<n; j++) {
            /* このへんを書く */
        }
        if (carry != 0) {
            a[n] = carry;
            n++;
        }
    }

    for (j=n-1; j>=0; j--) {
        printf("%04d", a[j]);
    }
    printf("\n");

    return 0;
}
補足:
小テスト (7月15日) /