算法资源库(2)阶乘2问题

57 阅读1分钟

一、 问题描述 

 二、算法思想 

  1. 初始化count为0,即因子5的个数
  2. 循环计算i从1到n的阶乘: a. 若i是5的倍数,则计算i除以5的结果,加到count上 b. 循环计算i除以5的结果是否还是5的倍数,若是,则再次计算结果除以5的结果,直到不是5的倍数为止,每次计算结果加到count上
  3. 返回count作为结果。

三、代码实现

#include <stdio.h>

int countEndingZeros(int n) {
    int count = 0;

    while (n >= 5) {
        count += n / 5;
        n /= 5;
    }

    return count;
}

int main() {
    int n;
    scanf("%d", &n);

    int zeros = countEndingZeros(n);
    printf("%d\n", zeros);

    return 0;
}

方法分析

算法时间复杂度为O(logn)

执行结果 

结语 

所有的轻而易举的背后

都是常人难以想象的付出与磨炼

!!!