C++中计算阶乘的尾随零个数


给定一个整数作为输入。目标是找到该数字阶乘计算中尾随零的个数。一个数字 N 的阶乘是范围 [1, N] 内所有数字的乘积。

我们知道,只有当数字是 10 的倍数或具有因子对 (2,5) 时,我们才会得到尾随零。在任何大于 5 的数字的阶乘中,在该数字的质因数分解中,2 的个数都多于 5 的个数。将数字除以 5 的幂将给出其因子中 5 的个数。因此,5 的个数将告诉我们尾随零的个数。

例如

输入

number=6

输出

Count of trailing zeros in factorial of a number are: 1

解释

The factorial is 30.
Prime factors of 30 : 2 * 3 * 5
So only one pair of (2,5) exists so trailing zeros is 1.

输入

number=12

输出

Count of trailing zeros in factorial of a number are: 2

解释

The factorial is 479001600.
Prime factors of 479001600 : 210 x 35 x 52 x 71 x 111
So we can get 2 pairs of (2,5) so trailing zeros are 2

下面程序中使用的算法如下

在这种方法中,我们将用 5 的幂来除以该数字。如果结果大于 1,则尾随零的个数将是 5 的个数。将其添加到计数中。

  • 将一个整数作为输入。

  • 函数 `trailing_zeros(int number)` 获取数字并返回该数字阶乘中尾随零的个数。

  • 将初始计数设置为 0。

  • 使用 for 循环,将数字除以 5 的幂。

  • 如果 number/i 大于 1,则将此值添加到计数中。

  • 在循环结束时返回计数作为结果。

示例

 在线演示

#include <iostream>
using namespace std;
int trailing_zeros(int number){
   int count = 0;
   for (int i = 5; number / i >= 1; i *= 5){
      int temp = number / i;
      count = count + temp;
   }
   return count;
}
int main(){
   int number = 50;
   cout<<"Count of trailing zeros in factorial of a number are: "<<trailing_zeros(number);
   return 0;
}

输出

如果我们运行上述代码,它将生成以下输出:

Count of trailing zeros in factorial of a number are: 12

更新于:2021-01-05

2K+ 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告