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

C++の階乗の桁を数える


整数値が与えられ、タスクは最初に数値の階乗を計算し、次に結果の合計桁数を計算することです。

階乗数とは

数値の階乗は、数値の桁を1で除算しながら、数値の桁を乗算することによって計算されます。これは、記号「!」、つまり0!、1!、2!、3!、5!、..で示されます。 。、等。 0の階乗!と1!常に1です。

I.e. factorial of 2 = 2 * (2-1) = 2 * 1 = 2
      factorial of 3 = 3 * (3-1) * (2-1) = 3 * 2 * 1 = 6

Input − factorial(6)
Output − number of digits in factorial(6) is: 3

説明 − 6の階乗値は720であり、3桁が含まれているため、結果は3

Input − factorial(12)
Output− number of digits in factorial(12) is: 9

説明 − 12の階乗値は479001600であり、9桁が含まれているため、結果は9になります。

以下のプログラムで使用されているアプローチは次のとおりです

  • 階乗を計算する必要がある数を入力します。

  • 数値が0未満の場合、負の数値には因数分解値がないため、0を返します

  • 数値が1の場合、1なので1を返します。 1で、1桁です。

  • 数が1より大きい場合、つまり2から始まる場合、または1つのループを作成する場合、2から始まり、数以下になるまで

  • 1つの一時変数(たとえばd)を取得し、ループの外側で0で初期化し、ループの内側で、iが繰り返されるたびにlog10(i)の値を追加し続けます。

  • その後、「floor(d)+1」のフロア値を返します

  • 結果を印刷します。

#include <iostream>
#include <cmath>
using namespace std;
// This function returns the number of digits present in num!
int count_digits(int num){
   // factorial exists only if num <= 0
   if (num < 0){
      return 0;
   }
   // base case
   if (num <= 1){
      return 1;
   }
   // else iterate through num and calculate the
   // value
   double d = 0;
   for (int i=2; i<=num; i++){
      d += log10(i);
   }
   return floor(d) + 1;
}
int main(){
   cout<<"number of digits in factorial(1) is: "<<count_digits(1)<< endl;
   cout<<"number of digits in factorial(6) is: "<<count_digits(6) << endl;
   cout<<"number of digits in factorial(106) is: "<<count_digits(106) << endl;
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

number of digits in factorial(1) is: 1
number of digits in factorial(6) is: 3
number of digits in factorial(106) is: 171

  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. C++で数値を除算する数値の桁数を検索します

    番号が与えられていると仮定します。数を均等に分割する数の桁数を数える必要があります。数値が1012で、結果が3であるとします。1012を均等に分割する3桁の1、1、および2があります。 これを解決するために、モジュラス演算を使用して数値の各桁を見つけ、数値がその桁で割り切れるかどうかを確認します。割り切れる場合は、カウンターを増やします。数字が0の場合は、その数字を無視します。 例 #include<iostream> using namespace std;    int countDivDigit(int num) {    int c