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