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

C++での乗算で整数のオーバーフローをチェックします


2つの数値AとBを乗算した後の結果を求めたいとします。乗算された値が64ビット整数を超えるかどうかを確認する必要があります。 100と200を掛けると、それを超えることはなく、10000000000と-10000000000を掛けると、オーバーフローします。

これを確認するには、いくつかの手順を実行する必要があります。これらは以下のようなものです-

手順

  • いずれかの数字が0の場合、それを超えることはありません

  • それ以外の場合、2を1で割ったものが他の値と等しい場合、それを超えることはありません

  • その他の場合は、それを超えます。

#include <iostream>
#include <cmath>
using namespace std;
bool isMulOverflow(long long A, long long B) {
   if (A == 0 || B == 0)
      return false;
   long long result = A * B;
   if (A == result / B)
      return false;
   else
      return true;
}
int main() {
   long long a = 10000000000 , b = -10000000000;
   if(isMulOverflow(a, b)){
      cout <<"It will overflow";
   }
   else{
      cout <<"It will not overflow";
   }
}

出力

It will overflow

  1. C++のバイナリツリーで子の合計プロパティを確認します

    二分木があるとします。二分木は、次の特性を満たす場合に有効です。 各ノードには、左右の子の値の合計と同じデータ値が含まれている必要があります。いずれかの側に子がない場合は、0として扱われます。 以下のように、指定されたプロパティを満たすツリーが存在するとします。 これをチェックするそのようなトリックはありません。ノードとその子の両方がプロパティを満たしている場合はツリーを再帰的にトラバースする必要があり、それ以外の場合はfalseを返します。 例 #include <iostream> using namespace std; class node {  

  2. 配列要素の乗算のためのC++プログラム

    整数要素の配列で与えられ、タスクは配列の要素を乗算して表示することです。 例 Input-: arr[]={1,2,3,4,5,6,7} Output-: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 Input-: arr[]={3, 4,6, 2, 7, 8, 4} Output-: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 以下のプログラムで使用されるアプローチは次のとおりです − 一時変数を初期化して、最終結果を1で格納します ループを0からnまで開始します。nは配列のサイズです 最終結果を得るには、tempの値にarr[i]を掛け続