蓝桥杯-每日刷题-028

阶乘末尾0的个数(一)

一、题目要求

  • 题目描述
    求N的阶乘末尾存在多少个0。
  • 输入格式
    输入存在多组测试数据,对于每组测试数据输入一个整数N(0<=N<=10^9)
  • 输出格式
    对于每组测试数据,输出一行表示答案。
  • 输入样例
    12
    20
  • 输出样例
    2
    4

二、完整代码

#include 

int countTrailingZeros(int N) {
    int count = 0;

    // 计算5的因子数量
    for (int i = 5; N / i >= 1; i *= 5) {
        count += N / i;
    }

    return count;
}

int main() {
    int N;

    while (std::cin >> N) {
        // 对每组测试数据输出答案
        std::cout << countTrailingZeros(N) << std::endl;
    }

    return 0;
}

三、解题思路

题目是求阶乘末尾有多少零。
如果直接应看的话,把阶乘算出来,然后数零的个数,想想就觉得很麻烦。
那有没有其他办法?
有多少零,就意味着,有多少个2*5;
因为在阶乘的过程中,2肯定比5多,所以只看5的个数就可以;
那么这个问题就转化成了求这个阶乘过程中出现5的个数,当然25相当于出现了两个5,等等。(可能表述的不是很清楚,但是就是这个意思。)
那么如何求5的个数呢?
典型的for循环。

你可能感兴趣的:(蓝桥杯,c++,算法)