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

C++のマシンで階乗を計算できる整数の最大値


この問題では、C++のマシンで階乗を計算できる整数の最大値を見つけるプログラムを作成する必要があります。

数値の階乗は、その前にあるすべての値の積であるため、大きな値です。また、C ++は、組み込み関数を使用することにより、特定の値までの大きな値のみを処理できます。この制限を見つける必要があります。

ソリューションアプローチ

データ型のプロパティを使用するだけです。これは、数値が最大値を超えると、負の数値が返されます。

最大の基本データ型であるlonglongintを使用します。

#include <iostream>
using namespace std;
int calcMaxFactVal(){
   int maxVal = 1;
   long long int maxFactorial = 1;
   while (true){
      if (maxFactorial < 0)
         return (maxVal - 1);
      maxVal++;
      maxFactorial *= maxVal;
   }
   return - 1;
}
int main(){
   cout<<"The maximum value of an integer for which factorial can be
   calculated on machine is "<<calcMaxFactVal();
   return 0;
}

出力

The maximum value of an integer for which factorial can be calculated on
machine is 20

  1. C++での符号なし整数の除算アルゴリズムの復元

    除算アルゴリズムを使用して符号なし整数を除算する方法について説明します。一部の除算アルゴリズムは紙に適用され、その他はデジタル回路に実装されます。除算アルゴリズムには、低速除算アルゴリズムと高速除算アルゴリズムの2種類があります。低速除算アルゴリズムには、復元、非実行復元、SRT、および非復元アルゴリズムが含まれます。 このチュートリアルでは、0<除数<被除数を想定した復元アルゴリズムについて説明します。 解決策を見つけるためのアプローチ ここでは、レジスタQを使用して商を格納し、レジスタAを使用して剰余を格納し、Mを使用して除数を格納します。 Aの初期値は0に保たれ、その値が復元されます

  2. C++で下から右に光を転送できる最大ミラー

    0と1のみを含む正方行列が与えられます。 0は空白または空の場所を表し、1は障害物を意味します。これらのミラーが下から右に光を転送できるように、空のセルに配置できるミラーをいくつか見つける必要があります。これは、ミラーがインデックス[i、j]に配置され、その特定の行(i)の右側のすべてのセルと、その特定の列の下部(j)のセルに障害物がない場合に可能です。 ミラーがA[i][j]にある場合、すべてのA [i+1からn][j]およびA[i][j + 1からn]は空、つまり0です。次の図に示すように。 入力 Arr[][] = {{0,0,1,0,0},{0,0,0,0,0},{0,0,0