0

重複の可能性:
階乗に起因する数値の後続ゼロのカウント

整数「p」が与えられます。「n階乗」の最後に「p」の数がゼロである数「n」を見つけなければなりません。これが私が考えた解決策ですが、それがこの問題の解決策であるかどうかはわかりません。階乗を計算する関数とゼロを取得する別の関数を作成する必要がありますか?

int p;
int count5=0;
int i;
int copy_i;

printf("Enter p: ");
scanf("%d",&p);

for(i=1; ;i++)
{
    copy_i=i;

    while(copy_i/5)
    {
        if(copy_i%5==0)
        {
            count5++;
            copy_i=copy_i/5;
        }
        else
        {
            break;
        }
    }

    if(count5==p)
    {
        printf("The minimum number n is: %d.",i);
        break;
    }
    else if(count5>p) 
    {
        printf("No match for n! with %d zero.",p);
        break;
    }

}
4

1 に答える 1

0

これはプロジェクトオイラーの問題のように聞こえるので、明示的な解決策は示しません。ただし、ここに2つのヒントがあります。

  • 最後にゼロがいくつあるかを調べるために、階乗を実際に計算する必要はありません。
  • 数値が2^Nと5^Nで割り切れる場合、その数値の最後には少なくともN個のゼロがあります。
于 2012-08-09T18:52:14.270 に答える