C ++:在结束优化时计数零

时间:2013-04-02 12:04:20

标签: c++ algorithm optimization

我正在尝试解决在任何自然数的阶乘结束时计算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;
}

提前致谢。

2 个答案:

答案 0 :(得分: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个因素,可以被5整除。其中N/25也可以被25整除,......

答案 1 :(得分:1)

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

count =  n div 5 + n div 25 + n div 125...