📅  最后修改于: 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;
}