C++ 中因数分解的尾部零


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

最简单的方法是直接计算阶乘并统计 0 的数量。但是,对于较大的 n 值,此方法将失败。因此,我们将遵循另一种方法。当质因数为 2 和 5 时,会出现尾部零。如果计算 2 和 5 的数量,就可以得到结果。为此,我们将遵循这条规则。

尾部 0 = 阶乘(n) 质因数中 5 的数量

因此,尾部 0 = $$\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

更新于:28-4-2020

186 次浏览

开启你的 职业 生涯

完成课程并获得认证

开始
广告