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

開啟您的 職業生涯

完成課程認證

開始
廣告