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+ 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.