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

C++で2つの整数を除算する


2つの整数の被除数と除数があるとします。乗算、除算、モジュロ演算子を使用せずに2つの整数を除算する必要があります。被除数を除数で割った後、商を返します。整数除算はゼロに向かって切り捨てる必要があります。両方の入力は整数です

したがって、与えられた入力が被除数=7、除数=-3の場合、出力は-2になります。

これを解決するには、次の手順に従います-

  • 2つの引数xとyを取ると、xがyを除算することを示します
  • x<-Infinityおよびy=1の場合、無限大を返します
  • a:=| x |、b:=| y |およびans:=0
  • while a – b> =0
    • p:=0
    • while a –(左シフトb(左シフト1 p回))> =0
      • p:=p + 1
    • a:=a –(左シフトb、p回)
    • ans:=ans+左シフト1p回
  • x> 0が真で、y> 0も真の場合は、ansを返します。それ以外の場合は、(– ans)を返します。
例(C ++)

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
   int divide(int l, int y) {
      if(l <= INT_MIN && y == -1)return INT_MAX;
      lli a = labs(l);
      lli b = labs(y);
      lli ans = 0;
      while(a-b >= 0){
         int x = 0;
         while(a-(b << 1 << x) >= 0){
            x++;
         }
         a -= b<<x;
         ans += 1<<x;
      }
      return (l>0)== (y>0)?ans:-ans;
   }
};
main(){
   Solution ob;
   cout << ob.divide(40, 3);
}

入力

40
3

出力

13

  1. TwoSumIV-入力はC++のBSTです

    二分探索木と1つのターゲット値があるとします。合計が指定されたターゲットと等しくなるように、BSTに2つの要素が存在するかどうかを確認する必要があります。 したがって、入力が次のような場合 その場合、出力はTrueになります。 これを解決するには、次の手順に従います- 配列を定義するv 関数inorder()を定義します。これはルートになります ルートがnullの場合、- 戻る 順序なし(ルートの左側) ルートの値をvに挿入 順序なし(ルートの左側) 関数findnode()を定義します。これにはkがかかります n:=vのサ

  2. C++で2つの二分木をマージする

    2つの二分木があり、一方をもう一方を覆うように配置すると、2つのツリーの一部のノードがオーバーラップし、他のノードがオーバーラップするとします。それらを新しいバイナリツリーにマージする必要があります。マージルールは、2つのノードがオーバーラップしている場合、ノード値を合計して、マージされたノードの新しい値として計算するようなものです。それ以外の場合は、空でないノードが新しいツリーのノードとして使用されます。 したがって、木が- その場合、出力は-になります これを解決するには、次の手順に従います- メソッドはmergeTrees()です。これは、2つのツリーノードn1と