#include <iostream>
using namespace std;
int countZeors(int n)
{
int cnt=0;// 用于存储末尾零的个数
int i=5;// 因为每个5都会贡献一个0,所以从5开始计算
// 循环直到 n 除以 i 小于 1
while(n/i >=1)
{
// 将 n 除以 i 的结果累加到 cnt
cnt+=n/i;
// 递增 i,继续计算下一个5的倍数的贡献
i*=5;
}
return cnt;
}
int main() {
int a;
while (cin >> a) { // 注意 while 处理多个 case
int result = countZeors(a);
std::cout << result << std::endl;
}
}
// 64 位输出请用 printf("%lld")
- 初始化 cnt为 0,
i
为 5,因为每个5都会贡献一个0。 - 使用
while
循环,直到 n
除以 i
小于 1,意味着已经计算完 n!
中所有能贡献0的5的倍数。 - 在循环中,将
n
除以 i
的结果累加到 cnt中,因为每个 i
都会贡献一个0。 - 将
i
乘以 5,以便计算下一个5的倍数的贡献。 - 循环结束后,返回计算得到的末尾零的个数。