C++程式:新增兩個二進位制字串,並以二進位制字串形式返回


假設我們有兩個二進位制字串a和b,我們需要將這兩個二進位制數相加並找到它們的和,也以字串的形式表示。

因此,如果輸入類似於a = "10110",b = "10010",則輸出將為"101000"。

為了解決這個問題,我們將遵循以下步驟:

  • ret := 空字串
  • na := a的長度,nb := b的長度
  • i := na - 1,j := nb - 1
  • carry := 0
  • 當 (i >= 0 或 j >= 0) 時,執行以下操作:
    • addA := (如果 i >= 0,則為 a[i] - '0' 的ASCII碼,否則為 0)
    • addB := (如果 j >= 0,則為 b[j] - '0' 的ASCII碼,否則為 0)
    • sum := addA + addB + carry
    • carry := sum / 2
    • sum := sum % 2
    • ret := ret 連線 sum
    • i -= 1
    • j -= 1
  • 如果 carry 不為零,則
    • ret := ret 連線 carry
  • 反轉陣列 ret
  • 返回 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

更新於: 2020年10月5日

928 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.