C ++中的阶乘尾随零

在这里,我们将看到如何为任意数量的阶乘结果计算尾随0的数量。因此,如果n = 5,则5!=120。只有一个尾随0。对于20!它将是4个零,即20!= 2432902008176640000。

最简单的方法是计算阶乘并计数0。但是,对于较大的n值,此方法将失败。因此,我们将采用另一种方法。如果素因子为2和5,则尾随零将存在。如果我们计算2s和5s,则可以得到结果。为此,我们将遵循此规则。

尾随0s =阶乘因数(n)的5s计数

因此尾随0s = $$\ lvert \ frac {n} {5} \ rvert + \ lvert \ frac {n} {25} \ rvert + \ lvert \ frac {n} {125} \ rvert + ... $$

为了解决这个问题,我们必须遵循以下步骤-

  • 设置计数= 0

  • 对于i = 5,(n / i)> 1,更新i = i * 5,做

    • 计数=计数+(n / i)

  • 返回计数

范例(C ++)

#include <iostream>
#include <cmath>
#define MAX 20
using namespace std;
int countTrailingZeros(int n) {
   int count = 0;
   for (int i = 5; n / i >= 1; i *= 5)
      count += n / i;
   return count;
}
main() {
   int n = 20;
   cout << "Number of trailing zeros: " << countTrailingZeros(n);
}

输入值

Number of trailing zeroes: 20

输出结果

Number of trailing zeros: 4