我正在尝试解决在任何自然数的阶乘结束时计算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;
}
提前致谢。
答案 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...