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

多数の階乗


コンピューターでは、変数はメモリ位置に格納されます。ただし、メモリ位置のサイズは固定されているため、15などのより大きな値の階乗を見つけようとすると!または20!階乗の値がメモリ範囲を超え、間違った結果を返します。

大きな数を計算するには、配列を使用して結果を格納する必要があります。配列の各要素に、結果の異なる桁を格納しています。ただし、ここでは、ある数値を配列で直接乗算することはできません。結果の配列のすべての桁に対して手動の乗算プロセスを実行する必要があります。

入力と出力

Input:
A big number: 50
Output:
Factorial of given number is:
30414093201713378043612608166064768844377641568960512000000000000

アルゴリズム

multiply(x、multiplicand)

入力: 数x、および配列としての大きな被乗数。

出力: 乗算後の結果。

Begin
   carry := 0
   for all digits i of multiplicand, do
      prod := i*x+carry
      i := prod mod 10
      carry := prod / 10
   done

   while carry ≠ 0, do
      insert (carry mod 10) at the end of multiplicand array
      carry := carry/10
   done
End

階乗(n)

入力: 数n。

出力: nの階乗を見つけます。

Begin
   define result array.
   insert 1 in the result

   for i := 2 to n, do
      multiply(i, result)
   done

   reverse the result
   return result
End

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void multiply(int x, vector<int>&multiplicand) {    //multiply multiplicand with x
   int carry = 0;     // Initialize carry to 0
   vector<int>::iterator i;

   for (i=multiplicand.begin(); i!=multiplicand.end(); i++) {   //multiply x with all digit of multiplicand
      int prod = (*i) * x + carry;
      *i = prod % 10;       //put only the last digit of product
      carry  = prod/10;    //add remaining part with carry  
   }

   while (carry) {    //when carry is present
      multiplicand.push_back(carry%10);
      carry = carry/10;
   }
}

void factorial(int n) {
   vector<int> result;
   result.push_back(1);    //at first store 1 as result

   for (int i=2; i<=n; i++)
      multiply(i, result);   //multiply numbers 1*2*3*......*n

   cout << "Factorial of given number is: "<<endl;

   reverse(result.begin(), result.end());

   vector<int>::iterator it;    //reverse the order of result

   for(it = result.begin(); it != result.end(); it++)
      cout << *it;
}

int main() {
   factorial(50);
}

出力

Factorial of given number is:
30414093201713378043612608166064768844377641568960512000000000000

  1. 多数の階乗を見つけるPythonプログラム

    nの数が多いとします。その階乗を見つける必要があります。他のいくつかの言語では、整数データ型の範囲を超える可能性があるため、多数の階乗を見つけるのは非常に困難です。ただし、Pythonでは、長さを自動的に検出し、デフォルトで数値をより大きな整数形式に更新します。 したがって、入力がn =50の場合、出力はになります。 30414093201713378043612608166064768844377641568960512000000000000 これを解決するには、次の手順に従います- 数学ライブラリから階乗クラスをインポートする 任意の大きな値のnの階乗を計算する

  2. Pythonのfactorial()

    数値の階乗を見つけることは、Pythonを含むデータ分析やその他の数学的分析で頻繁に必要とされます。階乗は、1から指定された数までのすべての整数を乗算することにより、常に正の整数に対して検出されます。以下に示すように、これを見つけるには3つのアプローチがあります。 Forループの使用 forループを使用して、指定された数まで1番を繰り返し、各ステップで乗算を続けることができます。以下のプログラムでは、ループで使用する前に、数値を入力して入力を整数に変換するようにユーザーに求めています。このようにして、計算で正の整数を確実に取得します。 例 n = input("Enter a nu