2

我正在尝试解决在任何自然数的阶乘末尾计算 0 的标准问题。我的代码工作正常,但在线判断给出“超出时间限制”错误。决定在这里询问我如何优化我的代码。

#include <iostream>

using namespace std;


int count (int n)
{
    int result = 0;
    for (unsigned int i = 5; i <= n; i += 5)
    {
        int temp = i;
        while (!(temp % 5))
        {
            ++result;
            temp /= 5;
        }
    }
    return result;
}



int main()
{
    int N;
    cin >> N;
    cin.get();
    for (unsigned int i = 0; i < N; ++i)
    {
        int n;
        cin >> n;
        cin.get();
        cout << count (n) << endl;
    }
    return 0;
}

提前致谢。

4

2 回答 2

2

试试这个:

int count (int n)
{
    int result = 0;
    for (unsigned int i = 5; i <= n; i *= 5)
        result += n / i;
    return result;
}

1*2*..*N中,有可N/5被 整除的因数5N/25其中也可以除以25, ...

于 2013-04-02T12:13:44.327 回答
1

您不必检查可被 5 整除的每个数字。相反,您可以用简单的系列数 5:

count =  n div 5 + n div 25 + n div 125...
于 2013-04-02T12:19:46.317 回答