C/C++ 程序计算一个数字阶乘末尾零的个数?


这里我们将了解如何计算任意数字的阶乘的末尾 0 的个数。因此如果 n = 5,则 5! = 120。只有一个末尾 0。对于 20!,将有 4 个零,因为 20! = 2432902008176640000。

最简单的方法就是计算阶乘并计算 0 的个数。但对于较大的 n 值,此方法会失败。因此我们将采用另一种方法。如果质因数为 2 和 5,则会出现末尾 0。如果我们计算 2 和 5 的个数,就可以得到结果。为此,我们将遵循此规则。

末尾 0 = 阶乘 (n) 的质因数中 5 的个数

算法

countTrailingZeros(n)

begin
   count := 0
   for i := 5, (n/i) >= 1, increase i := i * 5, do
      count := count + (n / i)
   done
   return count;
end

示例

#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 zeros: 4

更新于:2019-07-31

248 次浏览

开启您的 职业生涯

完成课程认证

开始
广告
© . All rights reserved.