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

C++の数値の階乗で後続ゼロをカウントします


入力として整数を指定します。目標は、その数に対して計算された階乗の後続ゼロの数を見つけることです。数値Nの階乗は、[1、N]の範囲内のすべての数値の積です。

数値が10の倍数であるか、因数ペア(2,5)がある場合にのみ、末尾のゼロが得られることがわかっています。 5を超える任意の数のすべての階乗で、その数の素因数分解に5を超える2の数があります。数値を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

  1. C++で長方形の正方形の数を数える

    =Bとなるように、長さL、幅Bの長方形が与えられます。目標は、サイズLXBの長方形が収容できる正方形の数を見つけることです。 上の図は、サイズ3 X 2の長方形を示しています。2、2X2の正方形、6,1X1の正方形があります。 総正方形=6+ 2=8。 サイズLXBのすべての長方形には、1X1の正方形のL*B数があります。 最大の正方形のサイズはBXBです。 L =B =1の場合、正方形=1。 L =B =2の場合、正方形=1 + 4 =5(2X2の1、1X1の4) L =B =3の場合、正方形=1 + 4 + 9 =14(3X3の​​1、2X2の4、1

  2. 数値の階乗で後続ゼロをカウントするPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −整数nが与えられているので、階乗の後続ゼロの数を数える必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # trailing zero def find(n):    # Initialize count    count = 0    # update Count    i = 5    while (n / i>= 1):       coun