0
#include<stdio.h>

int main()
{
    long ctr[100000],i;
    float j;
    long d[100000],T,h,o;

    scanf("%ld",T);
    printf("\n");

    for(i=0; i<T; i++)
    {
        scanf("%ld",d[i]);
        printf("\n");

        for(h=d[i]; h<=0; h--)
        {
            j=h%10;
            if(j==5)
            {
                ctr[i]++;
            }
        }
    }
    for(o=0; o<=i; o++)
    {
        printf("%ld\n",o);
    }
    return 0;
}

ユーザーが入力した "T" 数のグループの階乗の末尾のゼロの数を見つけるプログラムです。

私が行ったことは、各数値を 10 で除算し、数値が 5 かどうかをテストすることです。次に、数値が 0 になるまで数値を 1 減らします。5*4 の各ペアは、後続の 0 を 1 つ提供します。

プログラムがメモリを消費しすぎていませんか、それとも別の実行時エラーがありますか? このプログラムで実行時エラーが発生しています。誰か助けてもらえますか?

4

3 に答える 3

3

いくつかの観察:

  • long[100000]従来の 32 ビットを想定すると 400,000 バイトのスタックが必要で、 64 ビットのlong場合は 800,000 バイトが必要です。longこのような配列が 2 つあるため、プログラムがオペレーティング システムのスタック サイズの制限に達する可能性があります。
  • scanf()関数には、読み取っている値を格納する場所へのポインターが必要ですポインターを与えていません。ポールRがコメントで言ったように。
  • 正の数値が入力されたと仮定すると、ループfor(h=d[i]; h<=0; h--)は本体を実行しません。
于 2012-06-01T09:53:00.757 に答える
0

うーん...このループはループが無限に進んでいるように見えます。

for(h=d[i]; h<=0; h--)

したがって、実行時エラーが発生します...カウントが負になり、ループ条件は値がゼロ以下になるまで続行すると言っていますが、値がゼロに達することはないようです。

また、scanf 関数については、& 記号を使用することを忘れないでください。このような:

scanf("%ld", &sampleVariable);

これが実行時エラーの解決策です。:)


また、高精度変数を使用する必要があるかもしれません。膨大な量の数値を扱うため、double データ型よりも高い精度が必要だと思います。

追加情報については、こちらを参照してください: http://www.nongnu.org/hpalib/

于 2012-06-01T09:52:22.583 に答える
0

ループは無限に進んでいます。カウントが負になっていないことを確認してください。そうしないと、実行時エラーが発生します。

于 2012-06-26T01:31:00.293 に答える