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

2つのバイナリ文字列を追加し、C++でバイナリ文字列としても返すプログラム


2つの2進文字列aとbがあるとすると、これらの2進数を加算し、それらの合計を文字列として見つける必要があります。

したがって、入力がa ="10110"、b ="10010"の場合、出力は"101000"になります。

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

  • ret:=空の文字列
  • na:=aのサイズ、nb:=bのサイズ
  • i:=na-1、j:=nb-1
  • キャリー:=0
  • while(i> =0 or j> =0)、do:
    • addA:=(i> =0の場合、a [i]-ASCIIは「0」、それ以外の場合は0)
    • addB:=(j> =0の場合、b [j]-「0」のASCII、それ以外の場合は0)
    • sum:=addA + addB+キャリー
    • キャリー:=合計/ 2
    • sum:=sum mod 2
    • ret:=ret concatenate sum
    • (iを1つ減らす)
    • (jを1つ減らす)
  • キャリーがゼロ以外の場合、次のようになります。
    • ret:=retconcatenateキャリー
  • 配列を逆にするret
  • return ret

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string solve(string a, string b){
      string ret = "";
      int na = a.size();
      int nb = b.size();
      int i = na - 1;
      int j = nb - 1;
      int carry = 0;
      while(i >= 0 || j >= 0){
         int addA = i >= 0 ? a[i] - '0' : 0;
         int addB = j >= 0 ? b[j] - '0' : 0;
         int sum = addA + addB + carry;
         carry = sum / 2;
         sum %= 2;
         ret += to_string(sum);
         i--;
         j--;
      }
      if(carry)
         ret += to_string(carry); reverse(ret.begin(), ret.end());
         return ret;
   }
};
main(){
   string a = "10110", b = "10010"; Solution ob;
   cout << ob.solve(a, b);
}

入力

"10110","10010"

出力

101000

  1. C++で2つの二分木をマージするプログラム

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

  2. C++で2つのバイナリ文字列を追加するプログラム

    2進数の文字列が2つある場合、それら2つの2進数文字列を加算して得られた結果を見つけ、その結果を2進数文字列として返す必要があります。 2進数は、0または1のいずれかで表される数値です。2つの2進数を加算する際には、2進数の加算規則があります。 0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0, carry 1 入力 str1 = {“11”}, str2 = {“1”} 出力 “100” 入力 str1 = {“110”},