题解 | #末尾0的个数#
末尾0的个数
https://www.nowcoder.com/practice/6ffdd7e4197c403e88c6a8aa3e7a332a
#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的倍数的贡献。 - 循环结束后,返回计算得到的末尾零的个数。