C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の階乗後続ゼロ


ここでは、任意の数の階乗の結果の末尾の0の数を計算する方法を説明します。したがって、n =5の場合、5! =120。末尾の0は1つだけです。20の場合! 20として4つのゼロになります! =2432902008176640000。

最も簡単なアプローチは、階乗を計算して0を数えることです。ただし、このアプローチは、nの値が大きい場合は失敗します。したがって、別のアプローチに従います。素因数が2と5の場合、末尾のゼロがあります。2と5を数えると、結果を得ることができます。そのために、このルールに従います。

末尾の0=factorial(n)の素因​​数の5の数

したがって、末尾の0 =$$ \ lvert \ frac {n} {5} \ rvert + \ lvert \ frac {n} {25} \ rvert + \ lvert \ frac {n} {125} \ rvert + ... $$

>

これを解決するには、次の手順に従う必要があります-

  • カウントを設定=0
  • for i =5、(n / i)> 1、update i =i * 5、do
    • count =count +(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

  1. Nの基数B表現で後続ゼロの数を見つけます! C++を使用する

    この記事では、階乗のベースB表現で特定の数Nの後続ゼロを見つける問題を理解します。例 Input : N = 7 Base = 2 Output : 4 Explanation : fact(7) = 5040 in base10 and 1001110110000 in base16 having 4 trailing zero. Input : N = 11 Base = 5 Output : 2 Explanation : fact(11) = 39916800 in base10 and 40204314200 in base16 having 2 trailing zeroes.

  2. Nの基数16表現で後続ゼロの数を見つけます! C++を使用する

    この記事では、たとえば階乗の基数16の表現で特定の数Nの後続ゼロを見つける問題を理解します Input : N = 7 Output : 1 Explanation : fact(7) = 5040 in base10 and 13B0 in base16 having 1 trailing zero. Input : N = 11 Output : 2 Explanation : fact(11) = 39916800 in base10 and 2611500 in base16 having 2 trailing zeroes. まず、10進数を1つの基数から別の基数に変換するプロセ