📜  C C++程序,用于计算数字阶乘中的尾随零(1)

📅  最后修改于: 2023-12-03 15:29:42.020000             🧑  作者: Mango

计算数字阶乘中的尾随零

阶乘是从1到某个数字之间所有整数的乘积。在计算阶乘时,一个数可能有多个质因子2和5。因此,计算阶乘中尾随零的数目等价于确定该数有多少个因子2和5。

方法

假设n!是一个数字,要计算尾随零的数目,我们可以通过将n!因式分解为质因子的乘积来计算。由于2的倍数出现的次数比5的倍数多,因此我们只需要计算因式分解中因子5出现的次数,因为它们是衡量尾随零数量的瓶颈。

代码实现

这里提供C++代码实现,给定一个数字n,计算其阶乘中尾随零的数目。

int trailingZeros(int n) {
    int count = 0;
    for (int i = 5; i <= n; i *= 5) {
        count += n / i;
    }
    return count;
}

我们从5开始迭代乘法,直到i大于n,然后将每个i与n的整除部分相加。这个算法运行时间为O(logn)。

示例

以下是示例代码,输入10,输出2,因为10的阶乘中尾随2个零。

#include <iostream>

using namespace std;

int trailingZeros(int n);

int main() {
    int n = 10;
    cout << "The number of trailing zeros in " << n << "! is: " << trailingZeros(n) << endl;
    return 0;
}

int trailingZeros(int n) {
    int count = 0;
    for (int i = 5; i <= n; i *= 5) {
        count += n / i;
    }
    return count;
}